Нестабильность и многопоточность Java: каковы все возможные выходные данные следующей программы?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Нестабильность и многопоточность Java: каковы все возможные выходные данные следующей программы?

Сообщение Anonymous »

Рассмотрим следующий код:

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

public class Main {

public static void main(String args[]){
Thread t1 = new SimpleThread();
Thread t2 = new SimpleThread();
t1.start();
t2.start();
}

static class SimpleThread extends Thread {

private static volatile int n = 0;

public void run() {
n++;
int m = n;
System.out.println(m);
}
}
}
Каковы возможные результаты этой программы и почему?
Я рассмотрел следующие сценарии:
  • t1 и t2 выполняются полностью (не важно, в каком порядке), а не параллельно, поэтому имеем 1 2
  • t1 и t2 выполняются параллельно, в обоих потоках n++ выполняется «правильно», но планировщик сначала выполняет печать для потока, который имеет m=2, поэтому у нас есть 2 1< /li>
    t1 и t2 выполняются параллельно и оба считывают n=0 в инструкции n++, поэтому у нас есть 1 1
Правильно ли я понял эти сценарии? Есть ли какой-то сценарий, который я упускаю (например, может ли произойти 2 2 и почему)
?

Подробнее здесь: https://stackoverflow.com/questions/791 ... r-the-foll
Ответить

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

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

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

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

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