Передать целое число для запуска потока в Java

1

У меня проблема с Java с потоками. Я пытаюсь передать целое число из mainthread в другой запущенный поток в Java, но значение всегда равно 0. Есть ли способ решить это? Я предполагаю, что причина этого в том, что потоки имеют свою собственную жизнь.

Вот класс, который получает целое число - через метод accessor. Затем его предполагается напечатать в методе печати, но, как я уже упоминал, значение равно ZERO.

  class MyThread implements Runnable {


     private int val;

     public void run() {

         printVal();
     }

     public void setValue(int val) {
         this.val = val;
     }

     private void printVal() {

             while (true) {
                 System.out.println("val: " + this.val);

             try {
                 Thread.sleep(1000);
             } catch (InterruptedException ie) {

             }
         }
     }  
   }
Теги:
multithreading

1 ответ

3

Кажется, что у вас есть препятствие, созданное кешированным значением переменной. Чтобы решить эту проблему, объявите свой int изменчивым

private volatile int mainVal;

так что int не будет кэшироваться. Теперь вы можете передать его другим потокам без эффекта кеша.

  • 1
    пожалуйста, предоставьте больше кода в своем вопросе, как вы его используете
  • 0
    @ user2365568 Тогда кажется, что вы, возможно, не вызываете setValue() когда вы так думаете (я только что оставил setValue() комментарий по этому поводу). Пожалуйста, опубликуйте остальную часть вашего кода.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню