打字猴:1.7004751e+09
1700475100 while(true){
1700475101
1700475102 signInfo.setId(“ZhangSan”);
1700475103
1700475104 signInfo.setLocation(“ZhangSan”);
1700475105
1700475106 (new MultiThread(signInfo)).start();
1700475107
1700475108 signInfo.setId(“LiSi”);
1700475109
1700475110 signInfo.setLocation(“LiSi”);
1700475111
1700475112 (new MultiThread(signInfo)).start();
1700475113
1700475114 }
1700475115
1700475116 }
1700475117
1700475118 }
1700475119
1700475120 模拟实际的多线程情况,在对象池中我们保留4个对象,然后启动N多个线程来模拟,我们马上就看到如下的提示:
1700475121
1700475122 编号:LiSi
1700475123
1700475124 考试地址:ZhangSan
1700475125
1700475126 线程不安全了!
1700475127
1700475128 看看,线程不安全了吧,这是正常的,设置的享元对象数量太少,导致每个线程都到对象池中获得对象,然后都去修改其属性,于是就出现一些不和谐数据。只要使用Java开发,线程问题是不可避免的,那我们怎么去避免这个问题呢?享元模式是让我们使用共享技术,而Java的多线程又有如此问题,该如何设计呢?没什么可以参考的标准,只有依靠经验,在需要的地方考虑一下线程安全,在大部分的场景下都不用考虑。我们在使用享元模式时,对象池中的享元对象尽量多,多到足够满足业务为止。
1700475129
1700475130
1700475131
1700475132
1700475133 设计模式之禅 28.4.2 性能平衡
1700475134
1700475135 尽量使用Java基本类型作为外部状态。在报考系统中,我们不考虑系统的修改风险,完全可以重新建立一个类作为外部状态,因为这才完全符合面向对象编程的理念。好,我们实现处理,先看类图,如图28-4所示。
1700475136
1700475137
1700475138
1700475139
1700475140 图28-4 类作为外部状态
1700475141
1700475142 我们首先来看ExtrinsicState外部状态类,如代码清单28-13所示。
1700475143
1700475144 代码清单28-13 外部状态类
1700475145
1700475146 public class ExtrinsicState{
1700475147
1700475148 //考试科目
1700475149
[ 上一页 ]  [ :1.7004751e+09 ]  [ 下一页 ]