[JAVA] 자바 정리노트(6)
-쓰레드-
1. 쓰레드를 구현하는 방법으로는 Thread 클래스를 상속하거나, Runnable인터페이스를 구현하는 것이다. 전자의 경우 다른 클래스를 상속받을 수 없기에 후자의 경우가 보다 일반적이다.
2. 한 번 실행을 종료한 쓰레드는 다시 실행할 수 없다.
3. 멀티 쓰레드가 무조건 싱글 쓰레드로 작업한 시간보다 덜 걸리는 것은 아니다. 이유인즉 쓰레드간 작업 전환시간이 소요되기 때문이다. 이 소요시간을 'context switching'이라 한다.
4. 쓰레드는 OS의 프로세스 스케줄러의 영향을 받는다. OS 종속적이다.
5. 쓰레드는 우선순위를 지정할 수 있으며, 우선순위의 범위는 1~10까지로, 숫자가 높을수록 우선순위가 높다. 또한 쓰레드를 생성한 쓰레드로부터 우선순위를 상속받는다. 쓰레드의 우선순위 지정은 실행 이전에만 가능하다.
6. 연관된 쓰레드들을 묶어 그룹으로 관리할 수 있다. 이를 쓰레드 그룹이라 한다. ThreadGroup(String 그룹이름)을 사용하여 생성 가능하다.
7. 데몬 쓰레드는 일반 쓰레드의 작업을 돕는 보조 쓰레드이다. 일반 쓰레드가 종료되면 데몬 쓰레드는 자동적으로 강제 종료 된다. 대표적으로 가비지 컬렉터를 들 수 있다.
8. 쓰레드는 NEW(쓰레드가 생성되었고 start()가 호출되기 이전의 상태), RUNNABLE(실행 중 또는 실행 가능한 상태), BLOCKED(동기화블럭에 의해 일시정지된 상태 : lock상태), WAITING(쓰레드 작업이 종료되지는 않았지만 실행가능하지 않은 일시정지 상태), TERMINATED(쓰레드의 작업이 종료된 상태)의 상태를 갖는다. 추가적으로 TIMED_WATING(일시정지시간이 지정된 경우)이 있다.
9. 쓰레드에서 lock이 풀리지 않으면 교착상태에 빠지므로 unlock()에 try-finally문으로 감싸는 것이 일반적이다.
10. 변수 앞에 volatile을 붙이면 메모리에서 값을 읽어오기 때문에 캐시-메모리간의 값 불일치를 막을 수 있다.
'▶개발 > JAVA' 카테고리의 다른 글
[JAVA] 자바 정리노트(7) (0) | 2019.01.27 |
---|---|
[JAVA] 자바 정리노트(5) (0) | 2019.01.26 |
[JAVA] 자바 정리노트(4) (0) | 2019.01.26 |
[JAVA]날짜와 시간 클래스, Date의 Calendar간의 변환 (0) | 2019.01.25 |
[JAVA] 자바 정리노트(3) (0) | 2018.12.19 |