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();
        }
    }
    
    
  • 相关阅读:
    MySql 用户 及权限操作
    MAC 重置MySQL root 密码
    在mac系统安装Apache Tomcat的详细步骤[转]
    Maven:mirror和repository 区别
    ES6 入门系列
    转场动画CALayer (Transition)
    OC 异常处理
    Foundation 框架
    Enum枚举
    Invalid App Store Icon. The App Store Icon in the asset catalog in 'xxx.app' can’t be transparent nor contain an alpha channel.
  • 原文地址:https://www.cnblogs.com/phyger/p/14029440.html
Copyright © 2011-2022 走看看