«Почему мой код не работает без энергозависимого?»JAVA

Программисты JAVA общаются здесь
Anonymous
«Почему мой код не работает без энергозависимого?»

Сообщение Anonymous »

Код: Выделить всё

public class NT8 extends Thread{

NT8(String ime, int prioritet){
super(ime);
setPriority(prioritet);
start();
}

@Override
public void run() {
while(signal){
brojac++;
}
System.out.println(currentThread().getName()+" je zavrsena!");
}

void promeni(){
signal = false;
}

static void main(String[] args) throws InterruptedException{
NT8 n1 = new NT8("Prva nit",5);
NT8 n2 = new NT8("Druga nit",5);
long ukupanBroj;
System.out.println("Glavna nit spava");
Thread.sleep(10000);
System.out.println("Glavna nit se budi");
System.out.println(n1.signal);
n1.promeni();
System.out.println(n1.signal);
System.out.println(n2.signal);
n2.promeni();
System.out.println(n2.signal);
n1.join();
n2.join();

ukupanBroj = n1.brojac+n2.brojac;
System.out.println(n1.getName()+ " zauzima ukupno "+(double)(n1.brojac*100.00)/ukupanBroj+"%");
System.out.println(n2.getName()+ " zauzima ukupno "+(double)(n2.brojac*100.00)/ukupanBroj+"%");
}

private volatile boolean signal = true;
long brojac = 0;
}
Посмотрите на мой код. Он показывает, сколько времени обработки использует каждый из двух моих потоков. У меня вопрос: почему этот код не работает должным образом, если я объявлю

Код: Выделить всё

private boolean signal = true
вместо

Код: Выделить всё

private volatile boolean signal = true;
Я знаю, что flaming обеспечивает видимость изменений между потоками, но в этом случае каждый поток имеет свою собственную переменную сигнала.

Подробнее здесь: https://stackoverflow.com/questions/798 ... t-volatile

Вернуться в «JAVA»