Назад к задачамПолучайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Junior — Senior
4
Определение результата неконтролируемого счётчика в многопоточном окружении
Условие задачи
В методе main создаются два потока, работающих с одним объектом Test2:
- первый поток (запускается через
new Thread(test2).start()) вызывает методinc()четыре раза; - второй поток (это основной поток
main) уменьшает значение счётчика также четыре раза, вызываяdec()напрямую. Оба потока используют один и тот же экземпляр класса, поэтому операции инкремента и декремента могут происходить одновременно без синхронизации. Необходимо указать, какое значение может вернуть методget()после завершения обеих последовательностей операций, и при каких обстоятельствах возможно получение нуля.
public class Test2 implements Runnable {
private int counter;
public void inc() {
counter++;
}
public void dec() {
counter--;
}
public int get() {
return counter;
}
@Override
public void run() {
for (int i = 0; i < 4; i++) {
inc();
}
}
public static void main(String[] args) {
Test2 test2 = new Test2();
new Thread(test2).start();
for (int i = 0; i < 4; i++) {
test2.dec();
}
System.out.println(test2.get());
}
}