foreach遍历list集合 求各位大神,Java多线程看哪本书好?
求各位大神,Java多线程看哪本书好?
推荐java并发编程实战这本书。
这本书从并发性和线程安全性的基本概念出发,介绍了如何使用类库提供的基本并发构建块,用于避免并发危险、构造线程安全的类及验证线程安全的规则。
如何将小的线程安全类组合成更大的线程安全类,如何利用线程来提高并发应用程序的吞吐量,如何识别可并行执行的任务,如何提高单线程子系统的响应性,如何确保并发程序执行预期任务,如何提高并发代码的性能和可伸缩性等内容。
最后介绍了一些高级主题,如显式锁、原子变量、非阻塞算法以及如何开发自定义的同步工具类。
总之,书中介绍的比较全,原理解析比较透彻。希望我的回答能帮到你。
多个线程可以读一个变量,只有一个线程可以对这个变量进行写,到底要不要加锁?
先说结论:不必要
- 如果不需要可见性,什么都不需要加
- 如果需要保证可见性,则需要加volatile关键字。这里可以加锁,但是没必要,对性能有影响
下面简单解释下原因:
加锁是因为操作不是原子性的,以i 这个操作来解释,看下面两张图。
i 这个操作需要
- 先将i的值从内存中读出来
- 然后加1
- 最后写回去
看上面第二张图,能很清楚的理解流程吧?
加锁就是保证上面的三步是一个原子操作。
回到问题,这里只有一个线程写,实际没有竞争,所以没必要加锁。
但是,看第一张图,因为有主内存和本地内存的存在
- 线程先写入本地内存
- 然后刷入主内存
- 其它内存同步主内存到工作内存
- 然后从工作内存中读取
一个线程写入后,不能保证其它线程立即看到,这就是可见性问题。
加了volatile关键字后,会强制操作后同步工作内存和主内存,保证其它线程立刻看到。
foreach遍历list集合 java遍历set集合 java同时遍历两个集合
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。