我正在准备 Java SE 7 程序员 II 考试。在其中一个模拟考试中,有一个练习可以从代码遭受的线程问题中找出答案。这是代码:
public class Test {
public static void main(String[] args) {
final Counter obj1 = new Counter("obj1");
final Counter obj2 = new Counter("obj2");
new Thread(new Runnable() {
@Override
public void run() {
Thread.currentThread().setName("first");
obj1.display(obj2);
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
Thread.currentThread().setName("second");
obj2.display(obj1);
}
}).start();
}
}
class Counter extends Thread {
int i = 10;
String name;
public Counter(String name) {
this.name = name;
}
public synchronized void display(Counter obj) {
try {
Thread.sleep(5);
obj.increment(this);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public synchronized void increment(Counter obj) {
System.out.println(++i);
}
}
他们说这是活锁。我看不到。请有人可以更详细地解释一下。