您的位置:首页 > 编程语言 > Java开发

java i++ 并非原子操作的解决方法——用AtomicInteger

2017-11-07 15:58 453 查看
以下代码只在运行结束后打印结果

[java] view
plain copy

public class Test1 {  

    private static  int a = 0;  

    public static void main(String[] args) throws InterruptedException{  

        System.err.println("LOL");  

        int n=500000;  

        while(n-->0){  

            startAdd();  

        }  

        Thread.sleep(2000);  

        System.err.println(a);  

    }  

    public static void startAdd(){  

        new Thread(new Runnable() {  

            @Override  

            public void run() {  

                a++;  

            }  

        }).start();  

    }  

}  

运行了5次结果

499980

499984

499982

499973

499989

而如果用AtomicInteger

[java] view
plain copy

public class Test2 {  

    private static  AtomicInteger a = new AtomicInteger(0);  

    public static void main(String[] args) throws InterruptedException{  

        System.err.println("LOL");  

        int n=500000;  

        while(n-->0){  

            startAdd();  

        }  

        Thread.sleep(2000);  

        System.err.println(a);  

    }  

    public static void startAdd(){  

        new Thread(new Runnable() {  

            @Override  

            public void run() {  

                a.getAndIncrement();  

            }  

        }).start();  

    }  

}  

运行5次结果

500000

500000

500000

500000

还是500000

懂了吧
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: