これが私の状況です。私はいくつかのシングルスレッドコードに取り組んでいます。コードは確率論的であり、平均を把握するには、コードの多くのインスタンスを実行する必要があります。生活をより簡単かつ迅速にするために、私の現在の解決策は を使用することExecutors.newFixedThreadPool
です。ここでの問題は、各スレッドが独自の独立したデータを持つ必要があることです。私が最初にこれを実装した方法は次のとおりです。
public class Data {
private static Map<Thread, Data> instanceMap = new ConcurrentHashMap<Thread, Data>();
public static Data getInstance() {
if (!instanceMap.containsKey(Thread.currentThread()))
instanceMap.put(Thread.currentThread(), new Data());
return instanceMap.get(Thread.currentThread());
}
private Data() {
}
}
これは、反復回数 <= スレッド数の場合に問題ありません。しかし、8 つのスレッドを使用して 20 回の反復を実行すると、問題が発生します。これらの 8 つのスレッドは 20 回の反復を実行するために再利用されるため、instanceMap
8 つのインスタンスしか含まれません。
では、このようなものを処理する正しい方法は何ですか? 私が本当に必要としているのは、反復ごとにスレッドを強制終了するスレッド プールです。に与えられたオブジェクトのrun
メソッドでスレッドを強制終了する方法はありますか? 検討すべき代替手段はありますか?Runnable
ExecutorService.submit
newFixedThreadPool