Ich habe einfache Klasse, das ist erweitert Thread-Klasse es Methode, die wie folgt aussieht laufen hat:Wie zu bestimmen, ob Thread eine Aktion tut
public void run() {
while(running) {
if(enabled)
{
doStep();
enabled = false;
}
else
{
try {
this.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
In anderen Platz in meinem Code, den ich anrufen, wenn ich will myObject
nennen doStep()
myObject.enbled = true;
Aber wie kann ich sicherstellen, dass myObject
tatsächlich doStep()
Verfahren beendet hat?
myObject.enable = true
while(myObject.isEnabled())
{
;
}
doActionAfterObjectFinish();
irgendwann Programm zu stecken verursachen in der Schleife, und sicher doStep()
es nicht verursachen.
@danke für Antworten anstelle von sempahores woudlnt es hilft, wenn ich Code auf solche Weise ändern?
public void run() {
while(running) {
if(enabled)
{
synchronized(this){
doStep();
enabled = false;
}
}
else
{
try {
this.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public synchronized boolean isEnabled() {
return enabled;
}
Eine erste Idee, einen Zähler hinzuzufügen wäre, die zählt, wie oft doStep() ausgeführt wurde. Fügen Sie Zähler ++ unterhalb der DoStep-Methode hinzu. Dann können Sie den Zähler ln äußere while wie myObject.getRuntimes()> 0 abfragen. – mstrewe