2013-04-10 2 views
5

동기화 된 블록 내에 새 스레드를 만들면 스레드 실행이 완료 될 때까지 블록이 잠긴 상태로 유지됩니까? 그렇지 않은 경우 잠긴 상태가 유지 될 때까지?동기화 된 블록 내에서 새 스레드 실행

String sLine; 
onClick(String line){ 
    synchronized (lock) { 
     sLine = line; 
     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       doProcessing(Sline);  
     }).start(); 
    } 
} 
+0

중복 - http://stackoverflow.com/questions/5295065/java-threads-and-synchronized-blocks?rq=1 – rajesh

+0

@rajesh no. 참조하는 질문은이 질문의 범위를 다루지 만 다른 질문입니다. – giulio

답변

7

코드 join() d가 새로 생성 된 스레드와 일치하여 잠길 때까지 기다릴 수 있습니다. join()이 없으므로 start()에 대한 호출이 완료되면 잠금이 해제됩니다.

+0

그래서 위의 경우 블록은 새로운 스레드가 생성 될 때까지 잠겨있을 것입니까? 그래서 run()이 완료 될 때까지 기다리지 않을 것입니다. – Sunny

+0

@Sunny, 네, 맞습니다. – hmjd

0

스레드는 별도의 수명을 가지고 있지 않습니다. 동기화 된 블록은 위의 경우 스레드의 시작점까지만 차단됩니다.