2013-06-01 18 views
6

毎秒Threadクラスを実行しようとしています。私は使用することができませんRunnable。私は次のようにしましたが、その投げ込みはStackOverflowExceptionです。誰でも私にスレッドクラスを毎秒実行させるための標準的な方法を教えてください。Android:毎秒スレッドを実行する標準的な方法

public class A extends Thread { 

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

このリンクは[どのように-DO-ご利用-TimerTaskをツー実行スレッド] [1] を助ける[1]:http://stackoverflow.com/questions/10029831/how-do-you-use-timertask-to-run-a-thread – Palejandro

答えて

3

たぶん、あなたは、あなたがrun()メソッドをオーバーライドしている最初の引数にTimerTaskScheduledExecutorService

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)のような選択肢を検討したいです。

例:それは無限再帰だから

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

スレッドを拡張するクラス内でこれを使用できますか?または、私はサービスクラスを作成する必要がありますか? – madhu

+0

私はこのメソッドをThreadクラスの中で実装しようとしました。私は働いていませんでした。私はデバッグしようとしましたが、flowはscheduleAtFixedRate(新しいRunnable()の後に空行に入れられませんでした)。 – madhu

関連する問題