ExecutorServiceを利用したバックグラウンド処理

      2017/02/09

ExecutorServiceは複数のスレッドを一括で管理してくれる便利な機能です。

生成

インスタンスの生成には複数の方法があります。

  • submit()されたスレッドを並列に処理する。
    ExecutorService mExecutor = Executors.newCachedThreadPool();
  • submit()されたスレッドを順番に実行する。
    ExecutorService mExecutor = Executors.newSingleThreadExecutor();
  • submit()されたスレッドを並列に処理するが、最大同時実行スレッド数を指定できる。下記の場合は最大同時スレッド数2。
    ExecutorService mExecutor = Executors.newFixedThreadPool(2)

スレッドの実行(タスクの送信)

下記で実行します。スレッドに空きが出来たら実行(空きがあれば即実行)します。
mExecutor.submit({Runnable実装クラスのインスタンス});

Thread は Runnable を implements している。

終了(シャットダウン)

下記で順序正しくシャットダウンを開始します。送信済みのタスクは実行されます。
executor.shutdown();

基本的な使い方

バックグラウンド処理クラス

呼び出し側

応用

メインスレッドからバックグラウンドスレッドへ順次データを渡して処理させる方法です。

バックグラウンドスレッドに渡すデータキューの部分

sModelExitは終了判定オブジェクト。

Model の解放が必要な場合

Model の解放が不要な場合

バックグラウンド処理クラス

呼び出し側

 - Java