了解Java中的Volatile关键字

时间:2015-07-14 21:39:11

标签: java volatile

我创建了一个小程序来理解Java Volatile关键字:

public class MultiThreadedCounter implements Runnable {

    private volatile int counter = 0;

    public void run() {

        increment();
        decrement();

    }

    private void decrement() {
        counter = counter - 5;
        System.out.println("dec = " + counter);
    }

    private void increment() {
        counter = counter + 5;
        System.out.println("inc = " + counter);
    }

    public static void main(String[] args) throws InterruptedException {
        MultiThreadedCounter m = new MultiThreadedCounter();
        Thread[] t = new Thread[100];
        int count = 0;
        while (true) {
            if (count >= 100) {
                break;
            }
            Thread t1 = new Thread(m);
            t[count] = t1;
            count++;
        }

        for (int i = 0; i < t.length; i++) {
            t[i].start();
        }
    }

}

现在在这个程序中,当我多次运行程序时,我看到了不同的结果集。

然后我尝试删除volatile变量的counter关键字并观察到类似的结果。当我多次运行程序时,我看到了不同的结果。

Volatile如何帮助此计划?当我们需要使用这个关键字时,我已经浏览了一些材料和SO帖子,但我没有清楚地了解这个关键字的使用情况。

0 个答案:

没有答案