Вот мой код:Почему синхронизация не работает должным образом?
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()' не являются атомарными. – bradimus