2013-04-10 114 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

没有线程有单独的生活。在以上情况下,同步块将被阻塞,直到线程的起始点。