2013-04-10 6 views
5

Wenn ich einen neuen Thread in einem synchronisierten Block erstellen, wird der Block bis der Thread-Ausführung gesperrt bleiben ist auch vollständig? Wenn nicht, dann bis wann wäre es verriegelt bleiben?Ausführung von neuem Thread in einem synchronisierten Block

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 Nr. Die Frage, auf die Sie sich beziehen, deckt den Umfang dieser Frage ab, ist aber eine andere Frage. – giulio

Antwort

7

Es wäre blieb nur gesperrt, wenn der Code join() d mit dem neu Thread erstellt, so dass für sie warten, um zu beenden. Da es keine join() ist, wird die Sperre aufgehoben werden, nachdem der Aufruf von start() abgeschlossen hat.

+0

so im obigen Fall wäre es nur dann blockieren, bis der neue Thread gesperrt wird erstellt wurde? also wird es nicht warten bis run() fertig ist? – Sunny

+0

@Sunny, ja, das ist richtig. – hmjd

0

kein Thread hat eine separate Lebensdauer. Der synchronisierte Block wird im obigen Fall nur bis zum Startpunkt des Threads blockiert.

Verwandte Themen