很多程序的复杂性都是由于并发引起的,如果在并发情况下,如果对象是无状态那可以很好的运行,无论是在单线程还是多线程环境下都没问题,但是很多时候对象的状态是需要上下文维护的,因此在并发情况下就很容易导致不一致性的情况。我们先看下面一个例子:
class File {
private int num;
public void incr() throws InterruptedException, BrokenBarrierException {
this.num ++;
}
public int getNum() {
return num;
}
}
测试代码:
for (int j = 0;j < 100;j ++) {
// 测试100次
final ExecutorService executorService = Executors.newCachedThreadPool();
Set<Integer> set = new HashSet<Integer>();
final File file = new File();
// 启动1000个线程
for (int i = 0;i < 1000;i &#