【发布时间】:2017-02-06 12:28:24
【问题描述】:
这是我的代码:
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 是synchronized。因此,它应该首先increment 一个数字然后释放lock,然后将lock 提供给线程t1 或t2。所以,它应该increment 一次一个数字,对吧?
但是为什么我的代码incrementing 一次是两个或三个数字?我是不是做错了什么(我是新手)?
【问题讨论】:
-
increment是synchronized,但count不是。increment()和System.out.println()这两个语句不是原子的。
标签: java multithreading synchronized