具有 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
以下问题出现在 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