2013-06-01 28 views
6

我試圖運行一個Thread類每一秒。我不能使用Runnable。我嘗試了以下方法,但是投擲StackOverflowException。任何人都可以讓我知道一個標準的方法來讓線程類每秒運行一次。安卓:標準的方式讓一個線程運行的每一秒

public class A extends Thread { 

    public void run() { 
     //do my stuff 
     sleep(1*1000,0); 
     run(); 
    } 
} 
+0

這個鏈接將幫助[怎麼辦,你用-A-的TimerTask到運行一個線程] [1] [1]:http://stackoverflow.com/questions/10029831/how-do-you-use-a-timertask-to-run-a-thread – Palejandro

回答

3

也許要考慮像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); 
+0

我們能否讓線程每秒運行一次?我本來可以考慮Runnable或ScheduledExecutorService,但我卡在一個場景中,我必須使用一個線程。請幫忙。 – madhu

+0

@madhu:**「我被困在必須使用線程的場景中。」** - 爲什麼?解釋爲什麼你不能用其他方法去做你需要做的事情。另外,解釋你需要做什麼。 – Squonk

+0

如果任務花費很長時間並且所有5個線程都被消耗,該怎麼辦?這不會完美。看到我的回答:) –

15

替代使用Timerschedule()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()

+0

你能舉個例子嗎?我是新來的... – madhu

2
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); 
+0

我們可以在一個擴展Thread的類中使用這個嗎?或者我應該創建一個服務類? – madhu

+0

我試圖在Thread類中實現這個方法。我沒有工作。我嘗試調試並且流程沒有在scheduleAtFixedRate(new Runnable()之後進入void run。 – madhu

相關問題