多线程操作--AtomicInteger
2017-08-04 14:36
176 查看
主函数:
能正确运行的代码,每次结果都是100000:
public class MultiThreadVolatile {
private AtomicInteger count = new AtomicInteger(0);
public int getCount(){
return count.get();
}
public void increase(){
count.incrementAndGet();
}
}
肯定出问题的代码A:
public class MultiThreadVolatile {
private Integer count = 0;
public int getCount(){
return count;
}
public void increase(){
count++;
}
}
可能出问题的代码B:
public class MultiThreadVolatile {
private volatile Integer count = 0;
public int getCount(){
return count;
}
public void increase(){
count++;
}
}
public static void main(String[] args) throws InterruptedException { final MultiThreadVolatile test = new MultiThreadVolatile(); ExecutorService executorService = Executors.newFixedThreadPool(150); for (int i =0 ; i < 100000; i++){ executorService.execute(new Runnable() { @Override public void run() { test.increase(); } }); } executorService.shutdown(); executorService.awaitTermination(100*1000, TimeUnit.DAYS); System.out.println(test.getCount()); }
能正确运行的代码,每次结果都是100000:
public class MultiThreadVolatile {
private AtomicInteger count = new AtomicInteger(0);
public int getCount(){
return count.get();
}
public void increase(){
count.incrementAndGet();
}
}
肯定出问题的代码A:
public class MultiThreadVolatile {
private Integer count = 0;
public int getCount(){
return count;
}
public void increase(){
count++;
}
}
可能出问题的代码B:
public class MultiThreadVolatile {
private volatile Integer count = 0;
public int getCount(){
return count;
}
public void increase(){
count++;
}
}
相关文章推荐
- 多线程基本操作
- linux多线程使用siglongjmp打断io操作
- 多线程操作之异步委托
- Java多线程操作局部变量与全局变量
- proc 多线程操作oracle
- Java多线程Socket操作猜数游戏样例
- 多线程与UI操作
- 多线程的常见操作
- Java使用synchronized实现多线程操作list<1>
- 多线程下变量-gcc原子操作 __sync_fetch_and_add等
- 请教c#多线程操作更新控件的简便方法
- 多线程/多进程写FIFO为原子操作(一次写小于PIPE_BUF内容)
- IOS 多线程之GCD的详细操作
- 多线程环境下对变量的读写操作的原子性问题(一道百度笔试题引发的思考)
- 秒杀多线程第三篇 原子操作 Interlocked系列函数
- C++11多线程(十):atomic原子操作的高效率(实例)
- C# 多线程操作控件
- JAVA多线程的共享数据操作
- 多线程操作的例子
- 多线程操作实例——生产者与消费者