我試圖運行一個Thread
類每一秒。我不能使用Runnable
。我嘗試了以下方法,但是投擲StackOverflowException
。任何人都可以讓我知道一個標準的方法來讓線程類每秒運行一次。安卓:標準的方式讓一個線程運行的每一秒
public class A extends Thread {
public void run() {
//do my stuff
sleep(1*1000,0);
run();
}
}
我試圖運行一個Thread
類每一秒。我不能使用Runnable
。我嘗試了以下方法,但是投擲StackOverflowException
。任何人都可以讓我知道一個標準的方法來讓線程類每秒運行一次。安卓:標準的方式讓一個線程運行的每一秒
public class A extends Thread {
public void run() {
//do my stuff
sleep(1*1000,0);
run();
}
}
也許要考慮像ScheduledExecutorService
ScheduledExecutorService scheduleTaskExecutor = Executors.newScheduledThreadPool(5);
/*This schedules a runnable task every second*/
scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {
public void run() {
DoWhateverYouWant();
}
}, 0, 1, TimeUnit.SECONDS);
替代使用Timer
的schedule()
或scheduleAtFixedRate()
(difference between these two),在第一個參數,在這種情況:要覆蓋run()
方法TimerTask
。
例子:
Timer timer = new Timer();
timer.schedule(new TimerTask()
{
@Override
public void run()
{
// TODO do your thing
}
}, 0, 1000);
你的榜樣導致堆棧溢出,因爲它是無窮遞歸,你總是從調用run()
run()
。
你能舉個例子嗎?我是新來的... – madhu
final ExecutorService es = Executors.newCachedThreadPool();
ScheduledExecutorService ses = Executors.newSingleThreadScheduledExecutor();
ses.scheduleAtFixedRate(new Runnable()
{
@Override
public void run()
{
es.submit(new Runnable()
{
@Override
public void run()
{
// do your work here
}
});
}
}, 0, 1, TimeUnit.SECONDS);
這個鏈接將幫助[怎麼辦,你用-A-的TimerTask到運行一個線程] [1] [1]:http://stackoverflow.com/questions/10029831/how-do-you-use-a-timertask-to-run-a-thread – Palejandro