Привет всем У меня есть этот код:Почему это не синхронизировано правильно?
public class ThreadTester {
public static void main(String args[]) {
Counter c = new Counter();
for (int i = 0; i < 10; i++) {
MyThread a = new MyThread(c);
MyThread b = new MyThread(c);
a.start();
b.start();
}
System.out.println("The value of the balance is " + c.getVal());
}
}
class MyThread extends Thread {
private Counter c;
public MyThread(Counter c){ this.c = c; }
public void run(){ s.increment(); }
}
class Counter {
private int i = 100;
public synchronized void increment(){ i++; }
public synchronized int getVal(){ return i; }
}
Теперь я подумал, что это должно дать желаемый результат 120 - однако результат, кажется, колеблется между 115 и 120. Если бы я добавить Thread.sleep(1)
после b.start()
я всегда получаю желаемый результат 120. Почему это происходит?
Это действительно было заблуждение меня, и я был бы признателен за любую помощь я могу получить, спасибо
Редактирование войны для улучшения ответа. Има позволил тебе выиграть со вступлением/защелкой ... ты избил меня до этого :) –
Это не война. Просто хочу дать хороший и полный ответ. –
Я имел в виду, что мы оба продолжали пересматривать, чтобы добавить больше деталей, а не то, что это было обязательно соревнование, но это выглядело так. –