zoukankan      html  css  js  c++  java
  • 【Java多线程】使用多线程计算阶乘累加 1!+2!+3!+...+19!+20!。其中一个线程计算阶乘,另一线程实现累加并输出结果

    (如发现问题,请帮忙指出,谢谢)使用多线程计算阶乘累加 1!+2!+3!+…+19!+20!。其中一个线程计算阶乘,另一线程实现累加并输出结果。

    class Info{
        double sum=1;
        double count =0;
        private boolean flag=false;
        double count1;
        public synchronized void set(double sum){
            if(!flag){
                try{
                    super.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            this.setSum(sum);
            try{
                Thread.sleep(300);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            this.setCount(count);
            flag=false;
            super.notify();
        }
        public synchronized void get(double count){
            if(flag){
                try{
                    super.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            try{
                Thread.sleep(300);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            flag=true;
            super.notify();
        }
    
        public double getCount() {
            return count;
        }
    
        public void setCount(double count) {
            this.count = count;
        }
    
        public void setSum(double sum) {
            this.sum = sum;
        }
    
        public double getSum() {
            return sum;
        }
    }
    
    class Producer implements Runnable {
        private Info info = null;
        public Producer(Info info) {
            this.info = info;
        }
    
        @Override
        public void run() {
            int i;
            boolean flag = true;
            if (flag) {
                for (i = 1; i <= 20; i++) {
                    try {
                        this.info.sum=1;
                        for (int j = 1; j <= i; j++) {
                            this.info.sum *= j;
                            if(i==20){
                                this.info.count1=this.info.sum;
                            }
                        }
                        Thread.sleep(90);
                        System.out.println(i + "!为" + this.info.sum);
                        this.info.set(this.info.sum);
                    }catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                flag=true;
            }else {
                try{
                    Thread.sleep(90);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                flag=false;
            }
        }
    }
    
    class Consumer implements Runnable{
        private Info info=null;
        private double count1=0;
        public Consumer(Info info){
            this.info=info;
        }
        @Override
        public void run() {
            for(int i=1;i<=20;i++){      
                try{
                    Thread.sleep(100);
                    this.info.count+=this.info.sum;
                    this.info.get(this.info.count);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.println("计算结果为:"+(this.info.count+this.info.count1));
        }
    }
    
    public class TestX {
        public static void main(String args[]){
            Info i=new Info();
            Producer pro=new Producer(i);
            Consumer con=new Consumer(i);
            new Thread(pro).start();
            new Thread(con).start();
        }
    }
    
    
  • 相关阅读:
    naturalWidth、naturalHeight来获取图片的真实宽高
    网站访问量等数据统计
    电话号码中间四位用****代替
    前端通过url页面传值
    前端存取cookie
    SQL Server 硬件和软件要求
    sql server 2017安装
    Js小知识及一些常见易混淆的知识点
    前端学习资料汇总
    短信验证码
  • 原文地址:https://www.cnblogs.com/phyger/p/14029440.html
Copyright © 2011-2022 走看看