首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java并发编程--同步数组

Java并发编程--同步数组
EN

Stack Overflow用户
提问于 2013-03-12 06:12:01
回答 2查看 190关注 0票数 1

假设我有四个类:党,生物,工作,物品。

派对有生物

各方都有物品

生物有作业(线程)

作业需要项目

我在确定如何同步单个项目时遇到了问题,因此没有任何作业可以同时访问某个项目。我在下面的表格中列出了聚会上所有可用的物品。

代码语言:javascript
复制
ArrayList<ItemInstance>

其中ItemInstance有一个项目和一个表示数量的整数。我不知道如何执行此列表上的锁定

代码语言:javascript
复制
ReentrantLock resourceLock = new ReentrantLock();
ArrayList<Condition> resourceConditions = new ArrayList<Condition>();

我想过这样做,但是锁定resourceLock会锁定所有的项目,对吗?另外,我需要锁定一个特定数量的项目。所以我的数组条目可能是

代码语言:javascript
复制
(Swords, 4)

在我的主列表中,但我可能只需要在我的工作中使用3把剑。我是否应该将它们全部存储在一个单独的列中,并删除数量?

一般的概念是我有一个大的党的清单,所有的项目和数量,然后我有很多的工作,但很少的清单的项目和数量所需的。我试图让我的作业线程等待足够的每一项,执行,然后释放要重用的项。

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

发布于 2013-03-12 06:28:26

您应该列出要执行的并发操作(类的方法)。勾勒出它们的依赖关系和不变量,这样您就可以知道哪些可以并发完成,哪些必须序列化(同步)。将您的作业定义为主要独立的任务,以实现最大的并发性和最小的阻塞。仔细看看java.util.concurrent提供了什么,特别是像Semaphore等更高级的类。

如果这听起来太宽泛和笼统,很抱歉。

票数 1
EN

Stack Overflow用户

发布于 2013-03-12 06:36:21

首先,正如其他一些人所指出的,你需要更清楚地了解和/或分析你正在尝试做的事情。

其次,一种“对程序员来说很容易”的方法是将CopyOnWriteArrayLists用于任何“棘手”的事情。就速度而言,它可能不是最高效的,但对于您的应用程序来说,它可能已经足够快了。至少考虑一下吧。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15349708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档