以下问题是针对OCP Java SE 7程序员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 :(得分:0)
使用一些日志多次运行它会显示运行线程的顺序会改变结果。在多次运行中,我确实得到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