0

現在、マルチスレッドの概念を学んでいます。handler と Runnable() を使用して、単一のスレッドを実行できます。コードで 2 つのスレッドを実行する必要があります。たとえば、Thread1 は method1() を実行し、thread2 は method2() を実行します。Thread1 は 2 秒間実行してから 1 秒間スリープする必要があります。その間、スレッド 2 が起動して 1 秒間実行されます。繰り返しますが、thread1 は 2 秒間実行する必要があります。このプロセスは継続的に行う必要があります。私はAndroidでこれをやっています。

質問は簡単に見えるかもしれませんが、この Web サイトで多くのチュートリアルと質問を経験したため、ここに質問を投稿する以外に方法はありません。私の文脈に合った投稿はありません。任意の提案をいただければ幸いです。前もって感謝します。

4

3 に答える 3

2

ScheduledThreadPoolExecutorこれは、タスクの並列実行を実現できる を使用して行うことができます。タスクをスケジュールするための小さなサンプル例:

//creates a thread pool of size 2
int poolSize = 2;
// creates ScheduledThreadPoolExecutor object with number of thread 2
ScheduledThreadPoolExecutor exec = new ScheduledThreadPoolExecutor(poolSize);

//starts executing after 1 second
ScheduledFuture<Callable-Type> sf = stpe.schedule(new TaskOne(), 1,TimeUnit.SECONDS);

//starts executing after 2 seconds
ScheduledFuture<Callable-Type> sf1 = stpe.schedule(new TaskTwo(), 2,TimeUnit.SECONDS);

また、以下のようにタスクを定義できます。

class TaskOne implements Callable<Callable-Type> {
    @Override
    public Callable-Type call() throws Exception {
        //DO YOUR WORK HERE
        return callable-type;
    }
}

class TaskTwo implements Callable<Callable-Type> {
        @Override
        public Callable-Type call() throws Exception {
            //DO YOUR WORK HERE
            return callable-type;
        }
    }

ScheduledThreadPoolExecutoroverを使用する利点は次のTimerとおりです。

  • タイマーは、タイマー タスクを実行するためのスレッドを 1 つだけ作成します。スケジュールされたスレッド プールは、延期された定期的なタスクを実行するための複数のスレッドを提供できるようにすることで、この制限に対処します。
  • Timer のもう 1 つの問題は、TimerTask がチェックされていない例外をスローすると、動作が低下することです。タイマー スレッドは例外をキャッチしないため、TimerTask からスローされた未チェックの例外によってタイマー スレッドが終了します。

参照:実際の Java 並行性

于 2013-09-04T11:35:21.757 に答える
2

サンプル

Timer timer = new Timer();
                    timer.schedule(new TimerTask() {

                        @Override
                        public void run() {
                            runOnUiThread(new Runnable() {

                                @Override
                                public void run() {
                                    //your code
                                }
                            });
                        }
                    }, 2000, 1000); // 2000 is delay and 1000 is call period

基準をマップするために使用できる別の schedule() メソッドもあります。

于 2013-09-04T10:12:17.020 に答える
0

以下の 2 つの機械化を使用しています。

Wait and Notify methods  
于 2013-09-04T10:13:32.270 に答える