Страницы

Поиск по вопросам

четверг, 28 февраля 2019 г.

Принцип многопоточности в Java

Здравствуйте. Не могу разъяснить для себя принцип организации и работы потоков в Java. Постараюсь вкратце объяснить суть проблемы. Есть класс MyClass public MyClass { public void method1(int n) { int c = method2(n); // Ещё что-то } public int method2(int n) { // что-то делает } } Создаю единственный экземпляр этого класса под названием myObject. Создаю Runnable, в который передаю ссылку на мой объект и в run() выполняю следующие действия: public void run() { while (true) { myobject .method2(someInt); } } После чего запускаю несколько потоков с этим Runnable. Обратите внимание, что методы не синхронизированы, вообще ничего не синхронизировано. Первый поток заходит в метод1 и вычисляет С = С1, после чего вытесняется, после этого в метод1 заходит второй поток, считает С= С2 и вытесняется. После этого просыпается первый поток и продолжает выполнение метода1, чему будет равно значение C для продолжающегося потока #1?


Ответ

C1. Ведь C - локальная переменная. PS: разумеется, если method2 не имеет побочного эффекта, а то иначе сам процесс вычисления c будет подвергнут гонке. И кстати этот вопрос не по организации потоков в Java, а вообще многопоточности.

Комментариев нет:

Отправить комментарий