4

ねえ、私は現在私のAndroidアプリに問題があります。ExcecutorInterfaceを実装して追加のスレッドを開始しています。

class Flasher implements Executor {
    Thread t;
   public void execute(Runnable r) {
     t = new Thread(r){
     };
     t.start();
   }
 }

Runnableを次のように起動します。

flasherThread.execute(flashRunnable);

しかし、どうすればそれを止めることができますか?

4

4 に答える 4

5

わかりました、これは非常に基本的なスレッド 101 ですが、別の例を見てみましょう。

古い学校のスレッド:

class MyTask implements Runnable {
    public volatile boolean doTerminate;

    public void run() {
        while ( ! doTerminate ) {
            // do some work, like:
            on();
            Thread.sleep(1000);
            off();
            Thread.sleep(1000);
        }
    }
}

それから

MyTask task = new MyTask();

Thread thread = new Thread( task );

thread.start();

// let task run for a while...

task.doTerminate = true;

// wait for task/thread to terminate:
thread.join();
// task and thread finished executing

編集:

スレッドを停止する方法に関するこの非常に有益な記事に出くわしました。

于 2012-12-19T18:52:19.517 に答える
3

実装Executorが良い考えかどうかはわかりません。Java が提供するエグゼキューターの 1 つを使用したいと思います。インターフェイスRunnableを介してインスタンスを制御できます。Future

ExecutorService executorService = Executors.newSingleThreadExecutor();
Future<?> future = executorService.submit(flashRunnable);
...
future.cancel(true);

また、プログラムが非同期実行を必要としなくなったときにExecutorService呼び出して、消費しているリソースを必ず解放してください。executorService.shutdown()

于 2012-12-19T18:38:28.733 に答える
1

独自の Executor を実装する代わりに、 ExecutorService を確認する必要があります。ExecutorService には以下の shutdown メソッドがあります。

以前に送信されたタスクが実行される正常なシャットダウンを開始しますが、新しいタスクは受け入れられません。

于 2012-12-19T18:39:11.417 に答える