直接贴代码:
public class TestSync implements Runnable {
Timer timer = new Timer();
@Override
public void run() {
if ("t1".equals(Thread.currentThread().getName())) {
timer.add(Thread.currentThread().getName());
} else {
timer.add2(Thread.currentThread().getName());
}
}
public static void main(String[] args) {
TestSync test = new TestSync();
Thread t1 = new Thread(test);
Thread t2 = new Thread(test);
t1.setName("t1");
t2.setName("t2");
t1.start();
t2.start();
}
}
class Timer {
private /*static*/ Integer num = 0;
public void add(String name) {
synchronized (num) {
num++;
try {
Thread.sleep(20);
} catch (InterruptedException e) {
}
System.out.println(name + ", num = " + num);
}
}
public void add2(String name) {
synchronized (num) {
num++;
try {
Thread.sleep(2);
} catch (InterruptedException e) {
}
System.out.println(name + ", num2 = " + num);
}
}
}
为什么有时候出来的结果是:
t2, num2 = 2
t1, num = 2
不应该是下面这个吗?
t1, num = 1
t2, num2 = 2