亚洲欧美日韩熟女|做爱高潮视频网址|国产一区二区三级片|国产Av中文字幕www.性色av|亚洲婷婷永久免费|国产高清中文字幕|欧美变态网站久re视频精品|人妻AV鲁丝第一页|天堂AV一区二区在线观看|综合 91在线精品

實際應用java多線程 java 多線程應用

2023-06-09


情景1


如果有Thread11、Thread2、ThreaD3、四條線程各自統計CThread4。、D、E、四盤大小,全過程統計完畢,交給Thread5進程進行匯總,該如何實現?


第一,通過java.util.concurrent.在Executors中創(chuàng)建一個線程池,并使用這個線程池來啟動這個過程。啟動所有要啟動的過程后,執(zhí)行線程池的shutdown()方法,即在所有過程完成后關閉線程池。然后通過isTerminated()線程池的方法來判斷線程池是否已關閉。成功關閉線程池,意味著整個過程已經完成。








import java.util.concurrent.ExecutorService;  
import java.util.concurrent.Executors;  

public class Test {  
    public static void main(String args[]) throws InterruptedException {  
        ExecutorService exe = Executors.newFixedThreadPool(50);  
        for (int i = 1; i <= 5; i  ) {  
            exe.execute(new SubThread(i));  
        }  
        exe.shutdown();  
        while (true) {  
            if (exe.isTerminated()) {  
                System.out.println(“結束了!");  
                break;  
            }  
            Thread.sleep(200);  
        }  
    }  
}



View Code




2)使用T.join,讓主線程等待這些工作線程結束。








public class 011JoinTester implements Runnable {

    private String name;

    public 011JoinTester(String name) {
        this.name = name;
    }

    public void run() {
        System.out.printf("%s begins: %s\n", name, new Date());
        try {
            TimeUnit.SECONDS.sleep(4);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.printf("%s has finished: %s\n", name, new Date());
    }

    public static void main(String[] args) {
        while (true){
            Thread thread1 = new Thread(new “JoinTester01”O(jiān)ne"));
            Thread thread2 = new Thread(new “JoinTester01”Two"));
            thread1.start();
            thread2.start();
            try {
                thread1.join();
                thread2.join();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            System.out.println("Main thread is finished");
        }

    }
}



View Code




情景2


實現經典消費模式








1 package com.example.demo.consumer;
 2 
 3 import java.util.LinkedList;
 4 
 5 /**
 6  *  生產者和消費者之間的問題
 7  *  wait、notify/notifyAll() 實現
 8  */
 9 public class Storage1 implements AbstractStorage {
10     //倉庫最大容量
11     private static final int _1MB = 128;
12     private final int MAX_SIZE = 100;
13     //倉庫存儲載體
14     private LinkedList list = new LinkedList();
15     //private Object object = new Object();
16     //進行生產
17     public void produce(int num){
18         //同步
19         synchronized (list){
20             //倉庫剩余容量不足以儲存即將生產的總產量,暫停生產
21             while(list.size() num > MAX_SIZE){
22                 System.out.println("""要生產的產品數量":"   num   "\t【庫存量】:"
23                           list.size()   "\t暫時無法完成生產任務!");
24 
25                 try {
26                     //不符合條件,生產堵塞
27                     list.wait();
28                 } catch (InterruptedException e) {
29                     e.printStackTrace();
30                 }
31             }
32 
33             for(int i=0;i list.size()){
50                 System.out.println(“要消費的產品數量”:"   num   "\t【庫存量】:"
51                           list.size()   "\t暫時無法完成消費任務!");
52 
53                 try {
54                     list.wait();
55                 } catch (InterruptedException e) {
56                     e.printStackTrace();
57                 }
58             }
59                 //滿足消費條件,開始消費
60                 for(int i=0;i



Storage1










public class Test{
    public static void main(String[] args) {
        // 倉庫目標
        AbstractStorage abstractStorage = new ()Storage1();

        // 生產者目標
        Producer p1 = new Producer(abstractStorage);
        Producer p2 = new Producer(abstractStorage);
        Producer p3 = new Producer(abstractStorage);
        Producer p4 = new Producer(abstractStorage);
        Producer p5 = new Producer(abstractStorage);
        Producer p6 = new Producer(abstractStorage);
        Producer p7 = new Producer(abstractStorage);

        // 顧客目標
        Consumer c1 = new Consumer(abstractStorage);
        Consumer c2 = new Consumer(abstractStorage);
        Consumer c3 = new Consumer(abstractStorage);

        // 設定生產者產品制造數量。
        p1.setNum(10);
        p2.setNum(10);
        p3.setNum(10);
        p4.setNum(10);
        p5.setNum(10);
        p6.setNum(10);
        p7.setNum(80);

        // 設定客戶消費商品的數量
        c1.setNum(50);
        c2.setNum(20);
        c3.setNum(30);

        // 進程開始實施
        c1.start();
//        try {
//            Thread.sleep(1000);
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//        }
//        abstractStorage.test();
        c2.start();
        c3.start();

        p1.start();
        p2.start();
        p3.start();
        p4.start();
        p5.start();
        p6.start();
        p7.start();
    }
}



main function




to be continued





本文為轉載內容,我們尊重原作者對本文的作權。如有內容錯誤或侵權問題,歡迎原作者聯系我們更正或刪除內容。

本文僅代表作者觀點,版權歸原創(chuàng)者所有,如需轉載請在文中注明來源及作者名字。

免責聲明:本文系轉載編輯文章,僅作分享之用。如分享內容、圖片侵犯到您的版權或非授權發(fā)布,請及時與我們聯系進行審核處理或刪除,您可以發(fā)送材料至郵箱:service@tojoy.com