为了账号安全,请及时绑定邮箱和手机立即绑定

关于并发JAVA的建议

关于并发JAVA的建议

慕仙森 2022-01-19 17:01:13
我是并发方面的新手(我相信我在 Monitors、Semaphores 和 reentrantLocks 方面做得很好)所以我不能使用它们。我必须使用并发包中的任何类或接口。Point 1.- 很少有线程必须访问一个数组并对它的元素进行汇总(我在这里使用了原子变量,有一个原子变量用作数组的指针)。点 2.- 在这里,许多线程(汽车)在岸边有,要过河。有一个模拟船的线程。当船上有 10 辆汽车时,它驶向对岸。重复这种安全措施,直到所有汽车都过河。我真的不知道在这里使用哪些。点 3.- 在这里,一些线程必须读取一些信息,而其他线程必须修改该信息(任意次数)。我相信在这里我必须使用 ReadWriteLock。第 4 点.- 生产者/消费者之类的问题。这里我使用了 BlockingQueue。第 5 点.- 组成一个类似问题的交换器并解决它(完成,非常简单的一个......交换字符串变量的 2 个线程)。如果您对在某些点使用哪种方法有任何建议(例如“不,在第 3 点使用原子变量,在第 1 点使用 cyclicBarrier”),将对我有很大帮助!
查看完整描述

2 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

Point 2:如果线程是船,它应该在河的一侧取车,在另一岸卸车。看起来银行上汽车的最自然表示是船上汽车的 BlockingQueue 和 ArrayList。通常,始终首先考虑 BlockingQueue。

第 3 点:这通常由同步方法或ReentrantLocks完成。


查看完整回答
反对 回复 2022-01-19
?
富国沪深

TA贡献1790条经验 获得超9个赞

原子变量

原子变量使用 CAS 算法进行,它们可以被多个线程安全地使用:

案件 :

典型的 CAS 操作对三个操作数起作用: 操作的内存位置 (M) 变量的现有期望值 (A) 需要设置的新值 (B) CAS 操作将 M 中的值原子更新为B,但仅当 M 中的现有值与 A 匹配时,否则不采取任何行动。

您可以使用可用于交换的交换器,在两个线程之间交换一些信息

https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Exchanger.html

阻塞队列是您提到的消费者生产者模型,因此要使用它,您需要创建两个线程,一个将是生产者,它将放入阻塞队列,消费者将从中消费(读取)。BlockingQueue的实现有很多,
这里有更详细的信息:

http://tutorials.jenkov.com/java-util-concurrent/blockingqueue.html

所以从你的名单上都是他们的地方。

您也可以在这里了解有关 java.util.concurrent 的内容,我认为这会有所帮助:

http://tutorials.jenkov.com/java-util-concurrent/index.html


查看完整回答
反对 回复 2022-01-19
  • 2 回答
  • 0 关注
  • 130 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信