首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

并发编程实战-第四章

序文:

如果你没有时间阅读这本,那你就来对地方了。小编会将每一章刨去废话,取其精华。分享给大家。如果觉得可以请不要忘了关注小编。我会定期跟新java 中的经典书籍。

正文:

第四章:对象的组合(更加适用的线程安全)

1.自己创建一个线程安全类,要考虑很多(发布是否逸出,是否可见,全部状态-包括自身的变量和对象引用中的变量是否线程安全等),不如在使用的时候进行封装。

2.当多个变量之间休要判断修改时,那么就得在一个原子操作中:不能首先修改一个值,然后释放锁并再次获得相同的锁修改另一值,这样也是不安全的。

3.如果某对象不是线程安全的,那么可以通过多种技术使其在多线程程序中安全的使用。(本章重点思想)

通过封闭机制(前章中提及-栈封闭-线程封闭)与合适的加锁策略结合起来,可以确保以线程安全的方式来使用非线程安全对象。

4.实例封闭:

将书籍封装在对象内部,可以将书籍的访问权限设置在对象方法上(get set),从而更容易确保线程访问数据时持有正确的锁。(避免逸出)

例如:作为类的私有成员(封装性),作为一个局部变量(栈封闭),封闭在线程内在方法之间传递(线程封闭)

下面的代码Person可能是不安全的,指定集合中添加 和 获取(可以添加类似的方法)都是安全的。(但是不代表从集合中获取的Person 这个对象就是安全的)

public class PersonSet{ private final Set

myset=new HashSet

(); public synchronized void addPerson(Person p){ myset.add(p); } public synchronized boolean containsPerson(Person p){ return myset.contains(p); }

5.java 内置所也称为监视器锁(前文提及过)

Java监视器模式仅仅是一种编写代码的约定,对于任何一种锁对象,只要自始至终都使用该锁都系昂都可以用来保护对象的状态。

可以使用私有锁来确保使用一个锁对象:私有锁对象可以将锁封装起来,使客户端无法得到锁,但是客户端代码可以通过公有方法来访问锁,以便参与到同步策略中。

6.在线程安全的类中添加新功能

直接在源代码中修改(最佳,这样可以使用相同的同步策略)

继承的方式(脆弱)

7.链表总方法锁,是不同的对象锁,所以不能保证线程安全。可以使用私有锁。

8.组合:为先有类中添加原子操作的跟好的方法。

就是写一个类提供安全的读 改 线程安全的方法。并且维护一个集合。

这样可以将对象存入到这个类的集合中。

9.文档化:将对应需要确保线程安全的状态进行说明,以便于以后维护。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190203A0CPG400?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券