私は配列に保持する5のスレッドプールを持っています:
private static final Collection<Thread> workerThreads = new ArrayList<Thread>();
しかし、osgi プラグインを再アップロードすると、スレッドは実行され続けますが、配列は空になるため、新しい 5 つのスレッドが読み込まれます。そのため、最終的には大量のスレッドが実行されます。
私のスレッド プールは永久に実行されるように設計されています。アイドル状態のままで、ジョブがキューに入るのを待ちます。
while (!queue.isEmpty()) {
try {
Job takenJob = queue.poll(5000, TimeUnit.MILLISECONDS);
if (takenJob != null) {
takenJob.execute();
}
} catch (InterruptedException e) {
log.error("ERROR", e);
}
}
基本的に問題は、osgi プロジェクトを再アップロードした後、古いスレッドへの参照が失われることです。
考えられる解決策: スレッドの有効期間を定義する必要があるため、プールはありませんが、各スレッドは最大 15 分存続してから終了します。その間、新しいスレッドが 15 分ごとに作成されるため、常にキューを監視しているスレッドがいくつかあります。
標準のjava.util.Date getTime()
を使用するだけでは最善の方法ではないようです。これを実装する方法について何か提案はありますか?