Я могу ошибаться, но я думаю, что вам нужно окружить
//critical section
a= increment(a);
//end
синхронизированным блоком и ввести объект блокировки следующим образом:
private static final Object LOCK = new Object();
@Override
public void run() {
while (true) {
synchronized (LOCK) {
if(a<1000){
//critical section
a = increment(a);
//end
}else{
break;
}
}
}
}
Необходимо проверить условиетакже внутри синхронизированного блока, в противном случае вы получите числа больше 1000.
Редактировать.предыдущий ответ был неверным.