3
私はThreadPoolExecuter
の1つで複数のスレッドを同時に実行できます。 Runnable
では、別のスレッドでメソッドを実行したいので、executeメソッドで別のスレッド(スレッドA)を作成しましたが、今度はスレッドAの結果をエグゼキュータスレッドで実行したいと考えています。 私は一つのサンプルを明確にしましょう: 呼び出し元スレッドでインターフェイスコールバックを呼び出すにはどうすればよいですか?
ThreadPoolExecuter threadPool = Executors.newFixedThreadPool(5);
threadPool.execute(new Runnable() {
@Override
public void run() {
// do something in threadPool thread
// call method in thread A
getInfo(new QueryExecutorInterface() {
@Override
public void onPostExecute(Cursor cursor) {
// do other thing in threadPool thread again.
}
});
}
});
QueryExecutorInterface
A
スレッドすると
ThreadPool
スレッドになります渡したいきた私のインタフェースです。
class A extend Thread {
@Override
public void run() {
// do something in thread A.
queryExecutorInterface.onPostExecute(cursor);
}
}
PS:私はコールリスナーが、私はスレッドA
になり得る方法を以下のようにコールバックしましたように私はReentrantLock
クラスを使用して代わりのスレッドA
を使用して、このシナリオを修正することができます。しかし、私はこれ以上のレイヤーを持っているので、私はロックを使いたくありません。
あなたの返事に感謝します。 解決策には問題は1つありますが、問題はありません。 'threadPool'に100個のタスクを追加すると、データを取得した後、新しい' runnable'が 'threadPool queue'の最後に移動します。この' runnable' ASAPを 'threadPool'キューで実行する解決策はありますか? –
次に、何らかのロックが必要です。しかしそれは、応答が来るまでプール内のスレッドをブロックします。私はあなたがそれをしないことをお勧めします。 一方、2つの独立したスレッドプールを持つことができます。リクエストを送信するためのリクエストとレスポンスを処理するリクエスト。 –
私は良い方法は、http://stackoverflow.com/questions/3545623/how-to-implement-priorityblockingqueue-with-threadpoolexecutor-and-custom-tasksのような 'PriorityThreadPoolExecuter'を実装すると思います。ご回答有難うございます –