具有 AtomicInteger 的线程的行为

Behavoir of Threads with AtomicInteger

以下问题出现在 OCP Java SE 7 Programmer II 考试的模拟考试中。解决方案说答案是 0,但我和我的同事不确定答案是否在 -5 和 5 之间(这是一个选择)有人可以为我们澄清一下吗?这是代码:

import java.util.concurrent.atomic.AtomicInteger;
class AtomicVariableTest {
        private static AtomicInteger counter = new AtomicInteger(0);
        static class Decrementer extends Thread {
                public void run() {
                        counter.decrementAndGet(); // #1
                }
         }
        static class Incrementer extends Thread {
                public void run() {
                        counter.incrementAndGet(); // #2
                }
         }
        public static void main(String []args) {
                for(int i = 0; i < 5; i++) {
                        new Incrementer().start();
                        new Decrementer().start();
                }
                System.out.println(counter);
         }
}

谢谢!

运行 多次使用一些日志显示线程的顺序 运行 改变了结果。在多次运行中,我确实得到了 0,但实验结果在我的机器上从 -1 到 2 不等。我会说对此唯一有效的答案是:在 -5 和 5 之间。

class AtomicVariableTest
{
    private static AtomicInteger counter = new AtomicInteger(0);

    static class Decrementer extends Thread
    {
        public void run()
        {
            counter.decrementAndGet(); // #1
            System.out.println("dec");
        }
    }

    static class Incrementer extends Thread
    {
        public void run()
        {
            counter.incrementAndGet(); // #2
            System.out.println("inc");
        }
    }

    public static void main(String[] args)
    {
        for (int i = 0; i < 5; i++)
        {
            new Incrementer().start();
            new Decrementer().start();
        }
        System.out.println(counter);
    }
}

此程序的输出如下所示:

inc
dec
inc
dec
inc
dec
inc
dec
0
inc
dec

dec
-1
inc
dec
inc
dec
dec
dec
inc
inc
inc