У меня проблема с 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) {
}
}
}
}
Кажется, что у вас есть препятствие, созданное кешированным значением переменной. Чтобы решить эту проблему, объявите свой int
изменчивым
private volatile int mainVal;
так что int
не будет кэшироваться. Теперь вы можете передать его другим потокам без эффекта кеша.
setValue()
когда вы так думаете (я только что оставилsetValue()
комментарий по этому поводу). Пожалуйста, опубликуйте остальную часть вашего кода.