본문 바로가기
▶개발/JAVA

[JAVA] 자바 정리노트(6)

by 브라더 준 2019. 1. 27.

[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