Java volatile的原子性研究、不能保证原子性

小鱼儿 2023-02-28 04:12 159阅读 0赞

volatile只能保证线程间变量的可见性,但是不能保证变量操作的原子性。

  1. /** * volatile原子性研究 * 原子性:一批操作是一个整体,要么同时成功,要么同时失败,不能被干扰。 */
  2. public class VolatileAtomicDemo {
  3. public static void main(String[] args) {
  4. Runnable target = new MyRunnable();
  5. for(int i = 1 ; i <=100;i++){
  6. //启动100个线程,执行100次任务
  7. new Thread(target).start();
  8. }
  9. }
  10. }
  11. class MyRunnable implements Runnable{
  12. private volatile int count;
  13. //一次任务是一个整体,加100
  14. @Override
  15. public void run() {
  16. for (int i = 1 ; i <=100;i++){
  17. count++;
  18. System.out.println(count);
  19. }
  20. }
  21. }

上列代码并不能每次运行结果都到10000,因为volatile不能保证原子性。

发表评论

表情:
评论列表 (有 0 条评论,159人围观)

还没有评论,来说两句吧...

相关阅读