@kudim

Как правильно изменять общую переменную из двух потоков?

Добрый вечер!

Есть вот такое задание:
"Write a short program in which two threads both increment a shared integer repeatedly, without proper synchronization, 1000 times, printing the result at the end of the program. Modify the program to use synchronized to ensure that increments on the shared variable are atomic." - Напишите короткую программу, в которой два потока одновременно увеличивают общую переменную, без синхронизации, 1000 раз, печатая результат в конце программы. Добавить в программу синхронизацию, чтобы гарантировать, что приращения общей переменной являются атомарными.

Написал следующий код:
public class Main {
	private static int element = 0;
	private static Object lock = new Object();

	public static void main(String[] args) {
		new Thread() {
			public void run() {
				synchronized (lock) {
					for (int i = 0; i < 1000; i++)
						element++;
				}
			}
		}.start();

		new Thread() {
			public void run() {
				synchronized (lock) {
					for (int i = 0; i < 1000; i++)
						element++;
				}
			}
		}.start();
		System.out.println(element);
	}
}


Но выводится 1000. И собственно вопрос. Где ошибаюсь? Почему не 2000?
Причем если убрать синхронизацию, то на выходе также получаю 1000.
Если решение в корне не верное, то буду рад если направите меня в нужную сторону.
Заранее спасибо.
  • Вопрос задан
  • 236 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы