2013-04-10 11 views
5

Jeśli utworzę nowy wątek wewnątrz bloku synchronicznego, czy blok pozostanie zablokowany do czasu zakończenia wykonywania wątku? Jeśli nie, to do kiedy to pozostanie zablokowane?Wykonywanie nowego wątku wewnątrz zsynchronizowanego bloku

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

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

+0

@rajesh no. Pytanie, które zadajesz, obejmuje zakres tego pytania, ale jest inne pytanie. – giulio

Odpowiedz

7

Zostanie zablokowany tylko wtedy, gdy kod join() d z nowo utworzonym wątkiem, czekając na zakończenie. Ponieważ nie ma numeru join(), blokada zostanie zwolniona po zakończeniu połączenia z start().

+0

tak w powyższym przypadku blok będzie zablokowany tylko do momentu utworzenia nowego wątku? więc nie będzie czekać, aż run() zostanie zakończone? – Sunny

+0

@Sunny, tak, to prawda. – hmjd

0

żaden wątek nie ma osobnego życia. blok synchroniczny będzie blokowany tylko do momentu rozpoczęcia wątku w powyższym przypadku.

Powiązane problemy