Как установить логический флаг потока-1 из потока-2 в многопоточности Java

Я пишу простуюmultithreaded Приложение, которое включает в себя три потока:Thread-1, Thread-2 а такжеmain.

Thread-1 этоrandom number класс генератора, которыйпроизводит random doubles и кормитThread-2.

Thread-2 истребляютчисла для расчета среднего. Я использовалPipedOutputStream тотThread-1 кормит сrandom numbers. Thread-2 использованияPipedInputStream съестьrandom numbers.

Вопрос в том::

если среднее значение превышает 1E5 вThread-2Хочу сигнализироватьThread-1 прекратить производить цифры. у меня естьboolean flag вThread-1 это должно быть включено. Как мне этого добиться?

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
import java.util.Random;

//

class NumGen extends Thread {

    PipedOutputStream pos;
    DataOutputStream dos;
    boolean isDone=false;

    public NumGen(PipedOutputStream pos){
        this.pos=pos;
        dos=new DataOutputStream(pos);
    }

    public void run(){
        while (!isDone){
            Random rand = new Random();
            try {
                dos.writeDouble(rand.nextDouble()+100.0);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

class RunningAvg extends Thread {

    PipedInputStream pis;
    DataInputStream dis;
    Double avg;
    int count;
    Double runningTotal;

    public RunningAvg(PipedInputStream pis){
        this.pis=pis;
        dis=new DataInputStream(pis);
            runningTotal=0.0;
    avg=0.0;
    }

    public void run(){
        try {
        while (dis.available()>0){
            count+=1;
            runningTotal+=dis.readDouble();
                avg=runningTotal/count;
                System.out.printf("The average in count no : %s is %s%n",count,avg);
                //if avg>1E5
                 //set NumGen.isDone=true
        }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }


public class InterThreadComm {

    public static void main(String[] args){


    try {
        PipedOutputStream pos= new PipedOutputStream();
        PipedInputStream pis = new PipedInputStream(pos);
        NumGen ng = new NumGen(pos);
        RunningAvg ra = new RunningAvg(pis);
        ng.start();
        ra.start();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    }


}

PS: код работает вечно, ничего не печатая на консоли, что мне еще предстоит выяснить, почему !!

Ответы на вопрос(4)

Ваш ответ на вопрос