Страницы

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

суббота, 11 января 2020 г.

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

#многопоточность #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, а вообще многопоточности.

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

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