[英]Implementing a timer in java
我的情況是,我有兩個並發線程,一個不能啟動計時器,另一個可以停止計時器。 計時器的工作方式如下:計時器啟動后將計數到5秒鍾,然后執行一個函數,直到計時器被另一個線程停止為止,它將繼續執行此操作。 如何用Java實現。 這就是我所擁有的,我認為這是錯誤的做法:
請注意,sleep是全局可變變量,其他兩個線程將打開和關閉。
void creatTime(final EventHandler handler)
{
Thread timer = new Thread()
{
public void run()
{
try
{
while(true)
{
while(sleep) Thread.sleep(1000);
//invoke function
}
}
catch(IOException e)
{
System.out.println(e);
}
}
};
timer.start();
}
}
您可以創建一個TimerTask
並將其安排為每5秒運行一次
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
// TODO Auto-generated method stub
//Invoke your function here
}
};
//創建一個計時器並安排它
Timer timer = new Timer();
timer.scheduleAtFixedRate(timerTask, 0, 5*1000);
//要終止計時器,可以調用其cancel
方法。
我同意TimerTask的建議。 通常,您可以將更多與線程相關的工作傳遞給java.util.concurrent等更高級別的功能。 例如,原始代碼不處理從睡眠中提早喚醒的問題。
另外,如果重新設計后仍保留sleep變量,則需要將其標記為volatile或通過同步的get和set方法進行訪問。 有一組有限的活動可確保在一個線程中完成的寫入對於在另一線程中完成的讀取必須是可見的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.