最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解讀線程池-Executors的newSingleThreadExecutor和newFixedThreadPool(1)區(qū)別

 更新時間:2024年08月06日 14:46:35   作者:Ahuuua  
這篇文章主要介紹了解讀線程池-Executors的newSingleThreadExecutor和newFixedThreadPool(1)區(qū)別,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

線程池Executors的newSingleThreadExecutor和newFixedThreadPool(1)

與其他等效的newFixedThreadPool(1)不同

  • newSingleThreadExecutor返回的執(zhí)行器保證不可重新配置。

與其他等效的newScheduledThreadPool(1)不同

  • newSingleThreadScheduledExecutor返回的執(zhí)行器保證不可重新配置以使用其他線程。

newFixedThreadPool(1)的返回結果我們可以通過強轉變成ThreadPoolExecutor,但是這個類是可以自行指定線程數(shù)的。

我們可以通過setCorePoolSize方法來修改。

這樣也就是說,這兩個方法的最大的區(qū)別是第一個方法可以修改線程的數(shù)量,如果用來指定線程數(shù)量為1是不安全的。

newSingleThreadExecutor方法則通過提供了一個包裝類完全堵住了這個漏洞。

舉個例子

拿newSingleThreadExecutor和newFixedThreadPool(1)舉例

import org.junit.Test;
 
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
 
public class ThreadPoolDemo {
    static class MyRunnable implements Runnable {
        @Override
        public void run() {
            System.out.println("開始");
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("結束" + Thread.currentThread().getName());
        }
    }
 
    @Test
    public void test() throws InterruptedException {
        //創(chuàng)建Runnable實例對象
        MyRunnable r = new MyRunnable();
 
        //創(chuàng)建線程池對象
        System.out.println("fixedThreadPool");
        ExecutorService fixedThreadPool = Executors.newFixedThreadPool(1);//包含1個線程對象
        for (int i = 0; i < 10; i++) {
            fixedThreadPool.submit(r);
        }
        Thread.sleep(10000);
        /**
         * 以上輸出:
         * fixedThreadPool
         * 開始
         * 結束pool-1-thread-1
         * 開始
         * 結束pool-1-thread-1
         * 開始
         * 結束pool-1-thread-1
         * 開始
         * 結束pool-1-thread-1
         * 開始
         * 結束pool-1-thread-1
         * 開始
         * 結束pool-1-thread-1
         * 開始
         * 結束pool-1-thread-1
         * 開始
         * 結束pool-1-thread-1
         * 開始
         * 結束pool-1-thread-1
         * 開始
         * 結束pool-1-thread-1
         */
 
        System.out.println("singleThreadExecutor");
        ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
        for (int i = 0; i < 10; i++) {
            singleThreadExecutor.submit(r);
        }
        Thread.sleep(10000);
        /**
         * 以上輸出:
         * singleThreadExecutor
         * 開始
         * 結束pool-2-thread-1
         * 開始
         * 結束pool-2-thread-1
         * 開始
         * 結束pool-2-thread-1
         * 開始
         * 結束pool-2-thread-1
         * 開始
         * 結束pool-2-thread-1
         * 開始
         * 結束pool-2-thread-1
         * 開始
         * 結束pool-2-thread-1
         * 開始
         * 結束pool-2-thread-1
         * 開始
         * 結束pool-2-thread-1
         * 開始
         * 結束pool-2-thread-1
         */
 
        System.out.println("fixedThreadPool(5)");
        ((ThreadPoolExecutor) fixedThreadPool).setCorePoolSize(5);
        for (int i = 0; i < 10; i++) {
            fixedThreadPool.submit(r);
        }
        Thread.sleep(10000);
        /**
         * 以上輸出:
         * fixedThreadPool(5)
         * 開始
         * 開始
         * 開始
         * 開始
         * 開始
         * 結束pool-1-thread-1
         * 結束pool-1-thread-5
         * 結束pool-1-thread-2
         * 結束pool-1-thread-3
         * 結束pool-1-thread-4
         * 開始
         * 結束pool-1-thread-4
         * 開始
         * 結束pool-1-thread-4
         * 開始
         * 結束pool-1-thread-4
         * 開始
         * 結束pool-1-thread-4
         * 開始
         * 結束pool-1-thread-4
         * singleThreadExecutor(5)
         */
 
        System.out.println("singleThreadExecutor(5)");
        ((ThreadPoolExecutor) singleThreadExecutor).setCorePoolSize(5);
        for (int i = 0; i < 10; i++) {
            singleThreadExecutor.submit(r);
        }
        /**
         * 以下輸出:
         * Exception in thread "main" java.lang.ClassCastException: java.util.concurrent.Executors$FinalizableDelegatedExecutorService cannot be cast to java.util.concurrent.ThreadPoolExecutor
         * 	at ThreadPoolDemo.main(ThreadPoolDemo.java:33)
         */
    }
}
 

總結

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Java多維數(shù)組和Arrays類方法總結詳解

    Java多維數(shù)組和Arrays類方法總結詳解

    這篇文章主要介紹了Java多維數(shù)組和Arrays類方法總結詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • java實現(xiàn)登錄驗證碼功能

    java實現(xiàn)登錄驗證碼功能

    這篇文章主要為大家詳細介紹了java實現(xiàn)登錄驗證碼功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • 詳談Lock與synchronized 的區(qū)別

    詳談Lock與synchronized 的區(qū)別

    下面小編就為大家?guī)硪黄斦凩ock與synchronized 的區(qū)別。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • Spring Boot集成MyBatis實現(xiàn)通用Mapper的配置及使用

    Spring Boot集成MyBatis實現(xiàn)通用Mapper的配置及使用

    關于MyBatis,大部分人都很熟悉。MyBatis 是一款優(yōu)秀的持久層框架,它支持定制化 SQL、存儲過程以及高級映射。這篇文章主要介紹了Spring Boot集成MyBatis實現(xiàn)通用Mapper,需要的朋友可以參考下
    2018-08-08
  • 深入淺析Java常用的格式化Json工具類

    深入淺析Java常用的格式化Json工具類

    這篇文章主要介紹了Java常用的格式化Json工具類的相關知識,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • 淺談選擇結構if語句和switch語句的區(qū)別

    淺談選擇結構if語句和switch語句的區(qū)別

    下面小編就為大家?guī)硪黄獪\談選擇結構if語句和switch語句的區(qū)別。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • java面試散列表及樹所對應容器類及HashMap沖突解決全面分析

    java面試散列表及樹所對應容器類及HashMap沖突解決全面分析

    這篇文章主要介紹了java面試中的java散列表及樹所對應容器類與HashMap沖突解決的問題總結,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-10-10
  • mybatis查詢返回Map<String,Object>類型的講解

    mybatis查詢返回Map<String,Object>類型的講解

    這篇文章主要介紹了mybatis查詢返回Map<String,Object>類型的講解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • spring boot下mybatis配置雙數(shù)據(jù)源的實例

    spring boot下mybatis配置雙數(shù)據(jù)源的實例

    這篇文章主要介紹了spring boot下mybatis配置雙數(shù)據(jù)源的實例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 詳細圖解Java中字符串的初始化

    詳細圖解Java中字符串的初始化

    字符串廣泛應用在Java編程中,在Java中字符串屬于對象,Java提供了String類來創(chuàng)建和操作字符串,下面這篇文章主要給大家介紹了Java中字符串初始化的相關資料,需要的朋友可以參考下
    2021-08-08

最新評論

呼图壁县| 乐清市| 微山县| 铜陵市| 孝感市| 如皋市| 和硕县| 郸城县| 赫章县| 五莲县| 万宁市| 石城县| 海伦市| 宜兰县| 衡山县| 海阳市| 三江| 莱州市| 渭源县| 桃园县| 高邑县| 墨玉县| 临湘市| 中江县| 行唐县| 邯郸县| 湄潭县| 花垣县| 安仁县| 宁津县| 安塞县| 高陵县| 同德县| 峡江县| 蒙阴县| 中卫市| 闽侯县| 象山县| 祁阳县| 横山县| 洛宁县|