1
我有一個線程正在運行一個模擬,並在邏輯層中迭代動態系統的一個步驟,然後重新繪製GUI以查看屏幕中的結果。爲了讓用戶查看系統如何變化,每次重繪之間都會有一個睡眠,但我也需要暫停仿真以觀察更改,這將停止重新繪製和系統迭代,直到用戶恢復模擬。暫停並恢復正在休眠的線程Java
目前看起來是這樣的:
simulationThread = new Thread(){
@Override
public void run(){
for(int i=0; i<iterations; i++){
world.iterate();
try{
Thread.sleep(100);
}catch(Exception e){
e.printStackTrace();
}
view.repaint();
}
}
};
simulationThread.start();
如何暫停simulationThread並能夠重新恢復它?我試着使用wait()方法,但是當線程睡眠問題等待被調用。我懷疑我應該改變線程的等待方式,直到下一次重新繪製,以便實現暫停/恢復任務,但我不知道如何。
也許還會使得isPaused volatile,以確保它在一段時間內從內存中重新讀取。 – slipperyseal
@SlipperySeal:'volatile'在這裏不需要,因爲編譯器禁止在'wait()'調用周圍重用緩存變量。 – Tsyvarev
很酷。我不知道。 – slipperyseal