假设我有四个类: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