1. 程式人生 > 實用技巧 >【Java多執行緒】使用多執行緒計算階乘累加 1!+2!+3!+...+19!+20!。其中一個執行緒計算階乘,另一執行緒實現累加並輸出結果

【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(); } }