- SynchronizedRGB color =
- new SynchronizedRGB(0, 0, 0, "Pitch Black");
- ...
- int myColorInt = color.getRGB(); // 1
- String myColorName = color.getName(); // 2
- //如不雅其他线程在1履行后调用set办法 就会导致 getName 跟getRGB的值不匹配
- synchronized (color) {
- int myColorInt = color.getRGB();
- String myColorName = color.getName();
- }
- //必须使这2个语句同步履行
如上,LocalObject对象没有被办法返回,也没有被传递给someMethod()办法外的对象。每个履行someMethod()的线程都邑创建本身的LocalObject对象,并赋值给localObject引用。是以,这里的LocalObject是线程安然的。事实上,全部someMethod()都是线程安然的。即使将LocalObject作为参数传给同一个类的其它办法或其它类的办法时,它仍然是线程安然的。当然,如不雅LocalObject经由过程某些办法被传给了其余线程,那它就不再是线程安然的了
创建弗成变对象的几条原则
- 不供给修改可变对象的办法。(包含修改字段的办法和修改字段引用对象的办法)
- 将类的所有字段定义为final、private的。
- 不许可子类重写办法。简单的办法是将类声明为final,更好的办法是将构造函数声明为私有的,经由过程工厂办法创建对象。
- 如不雅类的字段是对可变对象的引用,不许可修改被引用对象。
- 不共享可变对象的引用。当一个引用被当做参数传递给构造函数,而这个引用指向的是一个外部的可变对象时,必定不要保存这个引用。如不雅必须要保存,那么创建可变对象的拷贝,然后保存拷贝对象的引用。同样如不雅须要返回内部的可变对象时,不要返回可变对象本身,而是返回其拷贝
- final public class ImmutableRGB {
- // Values must be between 0 and 255.
- final private int red;
推荐阅读
【沙龙】51CTO诚邀您9月23号和多位技巧大年夜咖一路聊智能CDN的优化之路,抓紧时光哦! 互联网成长异常敏捷,所以我们创造了Web平台。平日 我们会忽视连通性等问题,但用户们却不会熟视无睹>>>详细阅读
本文标题:Java并发编程之并发代码设计
地址:http://www.17bianji.com/lsqh/37528.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示