스레드
코드의 실행 흐름
멀티 스레드
멀티 스레드에서 하나의 스레드는 나머지 스레드에 영향을 주기 때문에 예외 처리를 잘 해주어야 한다.
(ex. 서버 개발, 게임 개발에 많이 사용한다.)
- 스레드 생성 (방법1)
Thread thread = new Thread(Runnable target);
// 생성할 때, Runnable을 구현한 객체를 작성해주면 그것이 생성된다.
// Runnable 인터페이스에는 run() 추상 메소드 한개 정의되어 있다.
- 생성된 스레드 대기 상태로
thread.start();
- 스레드 생성 (방법2)
public class ThreadA extends Thread { @Override public void run() { } } Thread thread = new ThreadA();
// Thread 클래스의 run 메소드를 재정의
- 스레드 생성 (방법3)
익명 자식 클래스를 만들어 Thread의 메소드 재정의
스레드 이름 변경 : thread.setName("...");
- 스레드 생성, start( )하면 우선 -> 대기 상태(RUNNABLE)가 된다. (CPU 스케줄링 때문에)
- run과 대기를 반복한 후, 모든 코드가 실행되면 종료(TERMINATED)가 된다.
- core 개수에 따라 실행 가능한 스레드 개수가 정해진다.
- Thread.sleep(...) : 일시정지 하기도 한다.
-> main스레드가 먼저 돌아가고 있으므로, sumThread를 시작시키기 위해서는 join()을 이용해서 끼워넣기를 해야한다.
(중간에 sumThread가 실행되고, 그 이후 main스레드가 실행된다.)
무의미한 실행이 계속될 때, 다른 스레드에게 양보
-> Thread.yield(); 사용