Понимание блокировок в JavaJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Понимание блокировок в Java

Сообщение Anonymous »

Я пытаюсь понять блокировки в java, и у меня возникли проблемы с пониманием этой концепции.
Вот пример Java-кода с замки:

Код: Выделить всё

public class LockQ {

class Shared {
static int count = 0;
}

class LockExample implements Runnable {
Lock lock;

public LockExample(Lock lock) {
this.lock = lock;
}

@Override
public void run() {
lock.lock();

for (int i = 0; i < 5; i++) {
System.out.println("Working on count = " + Thread.currentThread().getName());
Shared.count++;
}

lock.unlock();
}
}

public static void main(String[] args) {
LockQ obj = new LockQ();
obj.demo();
}

public void demo() {
Lock lock = new ReentrantLock();

LockExample l1 = new LockExample(lock);
LockExample l2 = new LockExample(lock);
LockExample l3 = new LockExample(lock);

Thread t1 = new Thread(l1);
Thread t2 = new Thread(l2);
Thread t3 = new Thread(l3);

t1.start();
t2.start();
t3.start();

/*
try {
t2.join();
t3.join();
t1.join();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
*/

System.out.println("Final count value " + Shared.count);
}
}
Вот пример вывода

Код: Выделить всё

Working on count = Thread-0
Working on count = Thread-0
Working on count = Thread-0
Working on count = Thread-0
Working on count = Thread-0
Working on count = Thread-1
Working on count = Thread-1
Working on count = Thread-1
Working on count = Thread-1
Working on count = Thread-1
Working on count = Thread-2
Working on count = Thread-2
Working on count = Thread-2
Working on count = Thread-2
Working on count = Thread-2
Final count value 0
Мое замешательство:
Почему значение счетчика в конце равно 0?
Да печатается после завершения всех операторов печати внутри цикла, что означает, что все три потока завершили выполнение.
Код работает должным образом, если операторы соединения раскомментированы и в в конце я получаю:

Окончательное значение счетчика как 15


Подробнее здесь: https://stackoverflow.com/questions/792 ... ks-in-java
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»