リアルタイムの在庫データを提供するサードパーティのAPIは、各スクリップの価格更新ごとに新しいスレッドを作成しています(下記のコードのセクション)。Java - スレッドが多すぎるマルチスレッドの問題
byte[] data = new byte[byteLength];
System.arraycopy(byteArray.toByteArray(), index, data, 0, data.length);
new Thread(new BrokerAPI.parseData(data)).start();
これは(4 - 5時間)程度250,000+スレッド毎日を作成しても私のような初心者に悪いデザインのように見えました。価格は更新されていますが、私のプログラムは約2時間後にNullPointerExceptionをスローし始めます。私は問題が発生しているスレッドの数が多いために発生していると思われる。
私が監視する必要のscripsの合計数は約120であるので、私は特定のスレッドに書き込まれ、各価格更新120スレッドの最大を持っていることの方法で探しています。
私はこのニーズに応えるべきだと思いLinkに提供される解決策(プロデューサー/コンシューマーパターン)を参照してください。これを新しいコードに変換する方法についてのガイダンスをリクエストしてください。あるいは、最小数のスレッドでこれを達成する他の方法があれば、うれしいでしょう。
だけでなく、あなたがソースを編集することができた場合新しいスレッド構造を委譲で置き換えて、目的のサイズのスレッドプールを作成します。このAPIはCPUにバインドされているため、コアより多くのスレッドを作成すべきではありません。 – John
このサードパーティAPIを編集する権限と能力がありますか?そうでない場合は、何もできません。可能であれば、私は 'Executors'と' ExecutorService'についてお読みください。 – ControlAltDel