1. Multi Thread 정의
1) Thread 는 program 을 움직이는 원동력 이다.
2) Process 는 하나 이상의 Thread 로 되어 있다.
3) Main Thread 로 여러 개의 work thread 를 만들 수 있다.
2. Thread 생성 방법
Thread 생성 방법은 Runnable interface 구현과 Thread class 상속 방법이 있다. 두 방법 모두 익명 (Anonymous) 객체를 활용 할 수 도 있다.
3. Thread Name
1) Thread 가 여러 개다 보면 각각의 이름이 필요 하다.
2) 이름을 지정하지 않으면 Thread-n(0 부터 시작) 형태의 이름이 자동 지정 된다.
3) 다른 이름을 지정 하고 싶다면 setName() 을 사용 하면 된다.
4. Thread Name 생성방법
5. Thread 제어
1) 여러 Thread 를 실행 하다 보면 순서가 제멋대로 인 것을 볼 수 있다.
2) Thread 는 여러 일을 동시에 주기적으로 처리 해 줄 수 있으나 제어가 어렵다.
3) 제어가 어려운 이유는 Thread 는 Round Robin 방식을 사용 하기 때문 이다.
6. Round Robin
1) Round Robin은 원형이어달리기 라고 생각 하면된다.
2) 먼저 시작한다고 먼저 끝나지 않는다.
7. Synchronized
1) Thread 는 memory 를 공유 하기 때문에 객체 간의 데이터 간섭이 일어 나기도 한다. 즉, 내가 사용 하는 데이터를 누군가 사용하여 값이 바뀔 수도 있다는 뜻이다.
2) Synchronized = 동기화라고 한다 동기화란 내 작업이 다 끝나기 전에는 아무도 접근하지 못하게 하는 것이다. 대표적인 3가지 vactor, String buffer, hashtable 이세가지는 알아 둬야한다.
8. Thread State
1) Thread 는 생성 부터 종료 까지의 상태 값이 있다.
2) 우리는 getState() 를 통해 현재 상태를 알 수 있다.
3) New, Runnable, Terminated 상태 값 3가지 정도는 알고있어야한다
9. Thread Control
1) Thread 는 참 유용한 기능 이지만 예상대로 움직이지 않는다.
2) 그래서 Thread Control 을 위한 method 들이 존재 한다.
Thread Control 을 위한 method
1) sleep()
- Sleep 은 주어진 milliseconds 동안 thread 를 일시 정지 시킨다.
- Thread.sleep(1000) 형식으로 사용 한다.
2) yield()
- Yield 는 특정 스레드 에게 제어 권을 양보 한다. => 너도 한번 할 기회를 줄게
- Thread.yield() 형식으로 사용 한다.
3) join()
- Join 은 다른 thread의 종료를 기다린 후에 실행 할 때 사용 한다.
10.Demon Thread
- Demon Thread 는 main thread 작업을 돕는 보조적인 역할을 수행 한다.
- Work Thread 와 마찬가지로 main thread 에 의해서 생성 된다.