2016-04-17 9 views
0

Ich frage mich, ob ich Thread blockieren kann und etwas während des Blockierens tun oder einfach Zeit zählen, während der Thread blockiert ist, weil ich Warteschlange für Flugzeuge tun möchte. Meine Flughäfen darf nur einen Landeplatz, so dass ich verwendet Warteschlange mit nur einem Schlitz, dann verwenden Sie setzen Methode:Blockieren von Threads

world.getCities().get(cityID).getQueue().put(request); 

Dann möchte ich etwas Kraftstoff während der Landung brennen:

Thread.sleep(500); 
fuelTank = fuelTank - 100; 

Jetzt Flugzeug kann Easly Land, also benutze ich Methode nehmen():

world.getCities().get(cityID).getQueue().take(); 

Wenn alles fertig ist, kann nächste Flugzeug seine Landung starten.

Aber Flugzeug hat 0,5s gewartet, also hat sich sein Brennstoff nicht geändert und es wird die gleiche Menge an Brennstoff wie dieses Flugzeug vorher verbrennen und dieser zweite würde viel mehr brennen.

Also nochmal. Ich brauche einen Mechanismus, der blockierte Thread-Zeit zählt oder etwas während des Blockierens tut.

Vielen Dank im Voraus.

Antwort

0

Sie können die wait() - notify() Methoden anstelle von Schlaf verwenden, sie sind sauberer. Um die Zeit für einen blockierten Thread zu ermitteln, spawn Sie einen neuen Thread aus dem zu blockierenden Thread ab, indem Sie diesen Thread direkt vor der wait() -Methode starten. Dann stoppen Sie diesen Thread nach der unmittelbaren Zeile der wait() -Methode.

Es sollte ungefähr so ​​wie:

if(some_Condition_true) { 
    //start counting thread 
    wait(); 
    //halt counting thread 
}