0

私の play アプリケーションには、いくつかのジョブがあり、シングルトン クラスがあります。

私がやりたいことは、各ジョブがシングルトン クラスにデータを格納することです。このシングルトン クラスから、現在のジョブに対応するデータをさらに別のクラスを介して取得できるようにしたいと考えています。

言い換えれば、私はこのようなものが欲しいです:

-Job 1 は「Job1Data」をシングルトン クラスに格納します

・Job2は"Job2Data"をsingletonクラスに格納

-別のクラスは、現在実行中のジョブ(現在のスレッドで推測)のシングルトンクラスデータを要求し、それを使用します

これを実行するために、各ジョブが異なるスレッドで実行されると仮定しました。次に、シングルトン クラスに格納された各 Job のデータが、現在のスレッド ID をデータにマップする Map に格納されます。

ただし、スレッドセーフではない可能性があり(Hashtableはスレッドセーフであると言われていますが)、ジョブが実行されるたびに別のスレッドが作成され、マップが大きくなる可能性があるため、これが私が行うべき方法であるかどうかはわかりません多く、それ自体をクリアすることはありません。

私は自分がやりたいことをする別の方法を考えました。おそらく、シングルトンで ThreadLocal クラスを使用して、それがスレッドセーフであり、スレッド固有のデータを保存していることを確認できます。ただし、ジョブが実行されるたびに別のスレッドが使用される場合、うまく機能するかどうかはわかりません。さらに、データが削除されていない場合、ThreadLocal がメモリ リークを作成することをどこかで読みました。問題は、いつデータを削除できるかわからないことです。

それで、誰かが私の問題の解決策を持っていますか? ジョブの実行中に保存したいデータがグローバルクラスに保存され、別のクラスからアクセスできることを確認したいと思います(正しいジョブのデータにアクセスできるため、正しいスレッドだと思います)。

ご協力ありがとうございました

4

0 に答える 0