Javaのフレームワークを使用してExecutors
、マルチスレッドアプリケーションのスレッドプールを作成していますが、パフォーマンスに関する質問があります。
リアルタイムモードまたは非リアルタイムモードで動作できるアプリケーションがあります。リアルタイムの場合、私は単に以下を使用しています:
THREAD_POOL = Executors.newCachedThreadPool();
ただし、リアルタイムでない場合は、スレッドプールのサイズを制御できるようにする必要があります。これを行うために、私は2つのオプションについて考えていますが、違いがよくわかりません。どちらがパフォーマンスが優れているのでしょうか。
オプション1は、次の簡単な方法を使用することです。
THREAD_POOL = Executors.newFixedThreadPool(threadPoolSize);
ThreadPoolExecutor
オプション2は、次のように自分で作成することです。
RejectedExecutionHandler rejectHandler = new RejectedExecutionHandler() {
@Override
public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
try {
executor.getQueue().put(r);
} catch (Exception e) {}
}
};
THREAD_POOL = new ThreadPoolExecutor(threadPoolSize, threadPoolSize, 0, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(10000), rejectHandler);
より複雑なオプション2を使用する利点は何か、また、他のデータ構造を使用する必要があるかどうかを理解したいと思いLinkedBlockingQueue
ます。どんな助けでもいただければ幸いです。