为了账号安全,请及时绑定邮箱和手机立即绑定

在主功能中..不显示平均值。线程不活动但未终止。为什么?

在主功能中..不显示平均值。线程不活动但未终止。为什么?

慕田峪4524236 2023-08-04 15:18:33
我想创建一个程序来使用java中的线程计算通过控制台输入的数字的平均值。在主函数中,我从未从函数 getAverage() 中获得平均值的输出。出了什么问题..当我调试时..程序终止但在正常运行中..当我输入除双精度值以外的任何内容时它应该终止,但它不会发生。import java.util.*;public class P1{    private AverageCalculator ac;     private boolean stop;    public Thread inputThread,averageThread;    public P1()    {        ac = new AverageCalculator();        new UserInteraction(ac);        new ToAverage(ac);    }    public void printAverage()    {        System.out.println("Average is " + ac.getAverage());    }    private class AverageCalculator{        private double average=0,sum=0;        private int i=0;        private boolean flag=false;        private double getAverage()        {            return average;        }        private synchronized void sum(double val) {            while(flag) {                try {                    wait();                } catch(InterruptedException e) { System.out.println("Thread Interrputed"); }            }            sum += val;            i++;            flag = true;            notify();        }        private synchronized void calculateAverage()        {            while(!flag) {                try {                    wait();                } catch(InterruptedException e) { System.out.println("thread interrupted"); }            }            average = (sum / i);            flag = false;            notify();        }    }    private class UserInteraction implements Runnable {        private AverageCalculator ac;        //private boolean take=true;        private double input=0;        Scanner s = new Scanner(System.in);        private UserInteraction(AverageCalculator ac) {            this.ac = ac;            inputThread = new Thread(this,"Input thread");            inputThread.start();            stop=false;        }        public void run()        {            System.out.println("Enter number: ");            while(!stop) {                if(s.hasNextDouble() == false) {                    stop = true;                    s.close();                }
查看完整描述

1 回答

?
弑天下

TA贡献1818条经验 获得超8个赞

我没有完全调试您的代码,但问题是您正在调用wait(). 此方法将您的线程置于等待状态,并且必须调用notify()notifyAll()才能唤醒您的线程。

查看完整回答
反对 回复 2023-08-04
  • 1 回答
  • 0 关注
  • 108 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信