#многопоточность #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?
Ответы
Ответ 1
C1. Ведь C - локальная переменная. PS: разумеется, если method2 не имеет побочного эффекта, а то иначе сам процесс вычисления c будет подвергнут гонке. И кстати этот вопрос не по организации потоков в Java, а вообще многопоточности.
Комментариев нет:
Отправить комментарий