Party、Creature、Job、Item の 4 つのクラスがあるとします。
パーティにはクリーチャーがいる
パーティにはアイテムがある
クリーチャーにはジョブ(スレッド)がある
ジョブにはアイテムが必要
どのジョブもアイテムに同時にアクセスできないように、個々のアイテムを同期する方法を決定するのに苦労しています。パーティーで利用可能なすべてのアイテムのリストをフォームにまとめました
ArrayList<ItemInstance>
ここで、ItemInstance には Item と数量を示す整数があります。このリストでロックを実行する方法がわかりません
ReentrantLock resourceLock = new ReentrantLock();
ArrayList<Condition> resourceConditions = new ArrayList<Condition>();
そうしようと思ったのですが、resourceLock をロックするとすべての Item がロックされてしまいますよね?また、特定の量のアイテムをロックする必要があります。だから私の配列エントリは
(Swords, 4)
私のマスターリストにはありますが、私の仕事には3本の剣しか必要ないかもしれません. それらをすべて単一の列に保存して、数量を削除する必要がありますか?
一般的なコンセプトは、すべてのアイテムと数量を含む 1 つの大きなパーティー リストを作成し、必要なアイテムと数量の小さなリストを含む多数のジョブを作成するというものです。Jobs スレッドにすべてのアイテムを十分に待機させ、実行してから、アイテムを解放して再利用しようとしています。
PartyList =
(Swords, 7)
(Forks, 2)
(Bottles, 5)
JobEatList =
(Forks, 1)
//RUN THREAD
PartyList =
(Swords, 7)
(Forks, 1)
(Bottles, 5)
JobDineList =
(Bottles, 2)
(Forks, 4)
//WAIT