- 임계 영역 : 멀티 스레드 프로그램에서 단 하나의 스레드만 실행할 수 있는 코드 영역

- 동기화 : 보내고 받는 영역이 서로 okay 되면 전송하고 받음
   임계 영역을 지정하기 위해 동기화 메소드와 동기화 블록 제공 -> 스레드 내부에 동기화 존재 시 객체 잠금 걸어 다른 스레드가 임계 영역 코드를 실행하지 못함
   synchronized -> 인스턴스, 정적 메소드 어디든 가능

 

- 메소드
   ex) public synchronized void method(){

         //메소드 전체 내용이 임계영역이므로 스레드가 동기화 메소드 실행하는 즉시 객체는 잠금 일어나고                         //스레드는 동기화 메소드 실행 종료하면 잠금 풀림


        임계 영역  //단 하나의 스레드만 실행
  }

 


   
- 일부 내용만 임계 영역으로 만들고 싶다면 
   ex) public void method(){
                            //여러 스레드가 실행 가능 영역
                           synchronized(공유 객체){
                                       임계 영역  //단 하나의 스레드만 실행 -> 동기화 블록
                             }
       }

 

- 외부 코드들은 여러 스레드 동시에 실행할 수 있지만, 동기화 블록 내부 코드는 임계 영역이므로 한번에 한 스레드만 실행할 수 있고, 다른 스레드 실행 불가

- 실행 대기 상태 : 아직 스케줄링이 되지 않아서 실행을 기다리고 있는 상태 ex) 스레드 객체 생성하고, start() 메소드호출하면 상태 대기 상태 됨

- 실행 상태 : 스레드 스케줄링으로 선택된 스레드가 비로서 cpu 점유하고 run() 메소드 실행 -> running 실행 상태

- 대기 상태 : 스레드 스케줄링의 선태 기다리고 있는 상태
실행 대기 상태에는 모두 실행 되기 전에 스레드 스케줄링에 의해 실행 대기상태로 돌아갈 수 있음
그리고 실행 대기 상태에 있는 다른 스레드가 선택되어 실행 상태가 됨 -> 대기/실행 번갈아 자신의 run()을 조금씩 실행

- 종료 상태 : 실행 상태에서 run() 메소드 종료되면, 더 이상 실행할 코드가 없기 때문에 스레드이 실행이 멈춤

- 일시 정지 상태 : 스레드가 실행할 수 없는 상태. WAITING, TIMED_WAITING, BLOCKED 
  실행 상태로 가기 위해서 일시 정지 상태 -> 실행 대기 상태로 가야함
  * 예로 미디어 플레이어에서 동영상 보는 것

 

 

- getState() : 스레드의 상태에 따라 Thread.state 열거 상수 리턴 

객체 생성 NEW  스레드 객체가 생성, 아직 start() 메소드가 호출 되지 않은 상태 
실행 대기 RUNNABLE  실행 상태로 언제든지 갈 수 있는 상태 
일시 정지 WAITING  다른 스레드가 통지할 때까지 기다리는 상태 
TIMED_WAITING 주어진 시간 동안 기다리는 상태 
BLOCKED  사용하고자 하는 객체의 락이 풀릴 때까지 기다리는 상태 
종료  TERMINATED 실행을 마친 상태 

  

ex) Thread.State state = targetThread.getState(); 
    if(state == Thread.State.NEW){targetThread.start();} 
    if(state == Thread.State.TERMINATED){break;} 



-<이것이 자바다1>. 한빛미디어  

'JAVA' 카테고리의 다른 글

멀티 스레드 예제_BeepThread  (0) 2019.06.19
멀티 스레드_5  (0) 2019.06.19
멀티 스레드_3  (0) 2019.06.19
멀티 스레드_2  (0) 2019.06.18
멀티 스레드_1  (0) 2019.06.18

+ Recent posts