飞道的博客

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

543人阅读  评论(0)

(如发现问题,请帮忙指出,谢谢)使用多线程计算阶乘累加 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();
    }
}


转载:https://blog.csdn.net/qq_50816920/article/details/109896045
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场