• 【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();
        }
    }
    
    
  • 相关阅读:
    查询表结构信息 封装为存储过程了
    小代码大BUG,记解决Sqlite3死锁问题
    DICT协议浅解
    重载"=="和"!="运算符
    Path.Combine(string,string)
    [原创]SQL SERVER 2008 函数大全 字符串函数
    Could not find a Direct3D device that has a Direct3D9level driver and supports pixel shader 1.1 or greater.终极解决方法
    (转)SqlServer Management Objects简介,生成建表等SQL语句
    界面设计之颜色搭配
    献给初学者,[winform]中如何设计高效全局的快捷键?[ShortcutKeys]
  • 原文地址:https://www.cnblogs.com/phyger/p/14029440.html
Copyright © 2020-2023  润新知