黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java實現創建線程池

Java實現創建線程池

更新時間:2022-06-24 09:37:41 來源:動力節點 瀏覽1831次

Java實現創建線程池要怎么做?動力節點小編來告訴大家。線程池是可以“重用”執行任務 的池線程,這樣每個線程可以執行多個任務。線程池是為您需要執行的每個任務創建新線程的替代方法。

與重用已創建的線程相比,創建新線程會帶來性能開銷。這就是為什么重用現有線程來執行任務比為每個任務創建一個新線程會導致更高的總吞吐量。

此外,使用線程池可以更輕松地控制一次有多少線程處于活動狀態。每個線程都會消耗一定量的計算機資源,比如內存(RAM),所以如果你有太多線程同時處于活動狀態,那么消耗的資源總量(比如RAM)可能會導致計算機變慢——例如,如果消耗了太多 RAM,以至于操作系統 (OS) 開始將 RAM 換出到磁盤。

線程池用例

線程池通常用于多線程服務器。通過網絡到達服務器的每個連接都被包裝為一個任務并傳遞到線程池。線程池中的線程將同時處理連接上的請求。稍后將詳細介紹在 Java 中實現多線程服務器。

內置Java線程池

Java 在包中帶有內置的線程池java.util.concurrent,因此您不必實現自己的線程池。您可以在我關于java.util.concurrent.ExecutorService的文本中閱讀有關它的更多信息 。無論如何,了解線程池的實現仍然很有用。

Java線程池實現

這是一個簡單的線程池實現。該實現使用 Java 5 附帶 的標準Java BlockingQueue 。

導入 java.util.ArrayList;
導入 java.util.List;
導入 java.util.concurrent.ArrayBlockingQueue;
導入 java.util.concurrent.BlockingQueue;
公共類線程池 {

    私有阻塞隊列任務隊列=空;
    私有列表<PoolThreadRunnable> runnables = new ArrayList<>();
    私有布爾 isStopped = false;
    公共線程池(int noOfThreads,int maxNoOfTasks){
        taskQueue = new ArrayBlockingQueue(maxNoOfTasks);
        for(int i=0; i<noOfThreads; i++){
            PoolThreadRunnable poolThreadRunnable =
                    新的 PoolThreadRunnable(taskQueue);
            runnables.add(new PoolThreadRunnable(taskQueue));
        }
        for(PoolThreadRunnable runnable : runnables){
            新線程(可運行).start();
        }
    }
    公共同步無效執行(可運行任務)拋出異常{
        如果(this.isStopped)拋出
                new IllegalStateException("線程池已停止");

        this.taskQueue.offer(任務);
    }
    公共同步無效停止(){
        this.isStopped = true;
        for(PoolThreadRunnable runnable : runnables){
            runnable.doStop();
        }
    }
    公共同步無效 waitUntilAllTask??sFinished() {
        而(this.taskQueue.size()> 0){
            嘗試 {
                線程.sleep(1);
            } 捕捉(InterruptedException e){
                e.printStackTrace();
            }
        }
    }

}

下面是實現 Runnable 接口的 PoolThreadRunnable 類,因此它可以由 Java 線程執行:

導入 java.util.concurrent.BlockingQueue;
公共類 PoolThreadRunnable 實現 Runnable {
    私有線程線程 = null;
    私有阻塞隊列任務隊列=空;
    私有布爾 isStopped = false;
    公共 PoolThreadRunnable(BlockingQueue 隊列){
        任務隊列 = 隊列;
    }
    公共無效運行(){
        this.thread = Thread.currentThread();
        而(!isStopped()){
            嘗試{
                Runnable runnable = (Runnable) taskQueue.take();
                可運行的.run();
            } 捕捉(異常 e){
                //記錄或以其他方式報告異常,
                //但保持池線程處于活動狀態。
            }
        }
    }
    公共同步無效doStop(){
        isStopped = true;
        //從 dequeue() 調用中中斷池線程。
        this.thread.interrupt();
    }
    公共同步布爾 isStopped(){
        返回已停止;
    }
}

最后是如何使用上面的 ThreadPool 的示例:

公共類 ThreadPoolMain {
    公共靜態 void main(String[] args) 拋出異常 {
        線程池 threadPool = new ThreadPool(3, 10);
        for(int i=0; i<10; i++) {
            int taskNo = i;
            threadPool.execute(() -> {
                字符串消息 =
                        Thread.currentThread().getName()
                                + ": 任務" + taskNo ;
                System.out.println(消息);
            });
        }
        threadPool.waitUntilAllTask??sFinished();
        線程池.stop();
    }
}

線程池實現由兩部分組成。ThreadPool作為線程池的公共接口的類PoolThread,以及實現執行任務的線程的類。

為了執行一個任務,該方法ThreadPool.execute(Runnable r)以一個 Runnable實現作為參數被調用。內部Runnable在 阻塞隊列中排隊,等待出隊。

Runnable將由空閑出列 并PoolThread執行。PoolThread.run()您可以在方法中看到這一點。執行完PoolThread 循環并嘗試再次使任務出隊,直到停止。

停止該ThreadPool方法ThreadPool.stop()被調用。調用的停止在isStopped成員內部記錄。然后通過調用每個線程來停止池中的doStop()每個線程。請注意該 方法將如何在被調用后execute()拋出一個IllegalStateExceptionif 被調用。 execute()stop()

線程將在完成它們當前正在執行的任何任務后停止。注意 this.interrupt()調用PoolThread.doStop()。這可以確保在wait()調用內部的taskQueue.dequeue() 調用中阻塞的線程會中斷wait()調用,并使dequeue()方法調用留下一個InterruptedExceptionthrows。這個異常在 PoolThread.run()方法中被捕獲,報告,然后isStopped檢查變量。由于isStopped現在是真的,PoolThread.run()將退出并且線程死亡。

以上就是關于“Java實現創建線程池”的介紹,大家如果想了解更多相關知識,不妨來關注一下動力節點的Java視頻教程,里面的課程內容從入門到精通,細致全面,通俗易懂,適合小白學習,希望對大家能夠有所幫助。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 最近中文字幕视频国语中文字幕 | 日本天堂在线播放 | 国产精品每日更新 | aaa一级毛片 | 中国黄色毛片视频 | 50岁老女人毛片一级亚洲 | 中文字幕美日韩在线高清 | 日本a天堂 | 国产日产亚洲系列首页 | 国产精品久久久久久久人人看 | 精品成人在线 | 国产精品久久久久无毒 | 国产精品1024永久免费视频 | 日韩在线免费视频 | 成年在线观看视频免费看 | 欧美亚洲天堂网 | 一区二区精品在线观看 | 欧美日韩在线亚洲国产人 | 中文字幕一区精品欧美 | 最近的中文字幕大全免费8 最近的中文字幕2019更新 | 人人澡人人透人人爽 | 欧美videosex娇小hd| 一个人免费播放在线视频看片 | 国产人妖性一区二区 | 在线播放一区二区三区 | 极品蜜桃臀美女啪啪 | 日日操日日干 | 欧美高清日本三级人妇 | 成免费视频 | 一级乱理中文字幕韩国 | 天天做天天干 | 男女做爽爽视频免费观看 | 日日噜噜夜夜狠狠久久丁香七 | 欧美精品日韩一区二区三区 | 欧美精品午夜 | 在线欧美成人 | 伊人网在线免费观看 | 亚洲精品在线播放视频 | 冈本视频污 | 91福利免费体验区观看区 | 免费一级黄色毛片 |