Java并发编程深入解析
1. Integer与AtomicInteger的并发问题
在Java并发编程中,我们常常会遇到数据竞争的问题。以下是一段示例代码:
for(int i = 0; i < 1000; i++) {
incremeterThread[i] = new Incrementer();
decrementerThread[i] = new Decrementer();
incremeterThread[i].start();
decrementerThread[i].start();
}
for(int i = 0; i < 1000; i++) {
incremeterThread[i].join();
decrementerThread[i].join();
}
System.out.printf("Integer value = %d AtomicInteger value = %d ",
Counter.integer, Counter.atomicInteger.get());
实际输出会因线程调度而异,可能会出现以下情况:
Integer value = -2 AtomicInteger value = 0
Integer value = 2 AtomicInteger value = 0
Integer value = -1 AtomicInteger value = 0
Integer value = -1 A