码迷,mamicode.com
首页 > 编程语言 > 详细

Java 并发编程 - 2

时间:2017-01-07 22:22:49      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:可变   不可变对象   返回   注意   安全   阶段   更改   多线程   odi   

设计线程安全类

套路一: 实例限制

假如现在有一个非线程安全类, 让它可以被多线程安全访问, 可以做一层封装. 多线程 只通过 封装类进行访问.

注意事项, 一定要加对锁!

套路二: 返回深拷贝

若一个对象是可变对象, 假如不是太频繁地作为参数或者返回值传递, 可以通过每次在传递时, 构建深拷贝来保证线程安全.

这样做的缺点是:

  1. 要求对象以及所引用的对象(包括下层引用), 都有深拷贝的方法
  2. 若调用太频繁, 会产生性能问题
  3. 返回的对象是一份拷贝, 感知不到所做的更改

常用的方法和类:

  1. deepCopy()
  2. Collectons.unmodifiableMap

套路三: 不可变对象

不可变对象总是线程安全的, 可以利用这一特性, 将对象在 设计阶段设计成不可变对象. 然后在传递的时候, 就可以将直接返回不可变对象的引用. 

常用的方法和类:

  1. ConcurrentHashMap
  2. Collectons.unmodifiableMap
  3. 不可变对象

Java 并发编程 - 2

标签:可变   不可变对象   返回   注意   安全   阶段   更改   多线程   odi   

原文地址:http://www.cnblogs.com/pragmatic/p/6260355.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!