2013-04-10 111 views
5

如果我在同步塊內創建一個新線程,該塊會保持鎖定狀態直到線程執行完成嗎? 如果沒有,那麼到什麼時候它會保持鎖定?在同步塊內執行新線程

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

duplicate - http://stackoverflow.com/questions/5295065/java-threads-and-synchronized-blocks?rq=1 – rajesh 2013-04-10 12:53:54

+0

@rajesh no。你引用的問題涵蓋了這個問題的範圍,但是是一個不同的問題。 – giulio 2018-02-05 05:37:10

回答

7

只有代碼join() d與新創建的線程一起等待它完成,它纔會保持鎖定狀態。由於沒有join(),鎖定將在start()的呼叫完成後釋放。

+0

所以在上面的例子中,只有在創建新線程之前,塊纔會被鎖定。所以它不會等到run()完成? – Sunny 2013-04-10 12:56:17

+0

@孫尼,是的,這是正確的。 – hmjd 2013-04-10 12:57:35

0

沒有線程有單獨的生活。在以上情況下,同步塊將被阻塞,直到線程的起始點。