假設我有四個類:Party,Creature,Job,Item。Java併發編程 - 同步陣列
締約方具有生物
締約方有項目
生物有工作(線程)
職位要求的項目
我無法確定如何將單個項目,同步使得沒有工作可以在訪問某個項目同一時間。我在形式
ArrayList<ItemInstance>
其中ItemInstance有一個項目,一個整數,表示數量組裝在黨獲得所有項目的列表。我不知道如何執行此列表上的鎖
ReentrantLock resourceLock = new ReentrantLock();
ArrayList<Condition> resourceConditions = new ArrayList<Condition>();
我想過這樣做,但鎖定resourceLock將鎖定所有的項目,是否正確?另外我需要鎖定特定數量的物品。所以我的數組條目可能是
(Swords, 4)
在我的主列表中,但我可能只需要使用3把劍作爲我的工作。我應該只將它們全部存儲在一個列中並刪除數量?
一般的概念是我有一個大的黨列表與所有的項目和數量,然後我有很多的工作,所需的項目和數量很少的清單。我正在嘗試讓我的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
這些生物中有多少是哲學家? :)也許你最好用一個任務管理員來分配工作和物品給生物? – flup 2013-03-11 22:20:21
有幾種鎖定對象組的方法。但在我們去那裏之前,我有一個問題:你想通過鎖定實現什麼目標? – 2013-03-11 22:23:19
@SlavaImeshev「這樣任何作業都不能同時訪問一個項目」如果我有3個瓶子,任務使用2個,我只需要1個瓶子。 – 2013-03-12 13:08:27