我有一個名爲Flash
的類,其中定義了Runnable
。如何從同一個Runnable正確創建另一個線程實例?
class Flash
{
Runnable slow = new Runnable(){
public void run(){
//Do stuff here
}
}
};
Thread slowThread = null; //Just declared a Thread variable
//more stuff here
}
現在我有一個名爲blinkslow()
方法創建使用slow
可運行一個新的線程類對象:
void blinkSlow()
{
if(!threadRunning) //Boolean to make sure the thread is not running(works fine)
{
slowThread=null;
slowThread = new Thread(slow);
slowThread.start();
threadRunning = true;
}
}
現在,當run()
方法完成自己的工作,在其最後的陳述,它集這個布爾標誌threadRunning
爲false,並退出。
然後當我第二次調用方法blinkslow()
時,線程不運行。這是爲什麼發生? 我確信:
- 線程已停止即再次調用
blinkshow()
方法之前完成其run()
方法。 - 我不想再次重新啓動同一個線程,因爲語句
slowThread = new Thread(slow);
每次調用時都會使用Runnable創建一個Thread類的新實例。
如何在第一次結束執行之後再次創建runnable的另一個實例?我上面所做的是第二次沒有工作,我不知道爲什麼。
我們錯過了'threadRunning'的聲明。它是一個類實例嗎?我懷疑這個變量在執行後沒有被正確設置爲false。 – Xvolks
交換'slowThread.start();'和'threadRunning = true;'調用'start()'創建一個「發生在...之前」的關係,對於變量的所有其他修改到此時爲止,您的線程可能會在'start '返回 – Ferrybig
@Xvolks該標誌在同一個'Flash'類中聲明,就在這個Runnable之上。我的代碼直到現在都相當簡單,沒有太多的事情發生,我已經確認這個標誌設置並正常工作。 –