这是我的代码:
private int count = 0;
public synchronized void increment() {
count++;
}
public void doWork() throws InterruptedException {
Thread t1 = new Thread(new Runnable() {
public void run() {
for (int i = 0; i < 5; i++) {
increment();
System.out.println(count+" "+Thread.currentThread().getName());
}}});
Thread t2 = new Thread(new Runnable() {
public void run() {
for (int i = 0; i < 5; i++) {
increment();
System.out.println(count+" "+Thread.currentThread().getName());
}}});
t1.start();
t2.start();
}
这是我的输出结果:
2 Thread-1
2 Thread-0
3 Thread-1
5 Thread-1
6 Thread-1
4 Thread-0
8 Thread-0
9 Thread-0
7 Thread-1
10 Thread-0
我的理解是,
increment
是同步的。因此,它应该首先递增一个数字,然后释放锁,并将锁交给线程t1
或t2
。所以,它应该一次递增一个数字,对吗?但为什么我的代码每次增加两个或三个数字?我做错了什么吗(我是新手)?
increment()
方法是同步的,但count
不是。increment()
方法和System.out.println()
语句都不是原子操作。 - bradimus