java併發線程池 原

前言:如果併發的線程數量很多,並且每個線程都是執行一個時間很短的任務就結束了,這樣頻繁創建線程就會大大降低系統的效率,因爲頻繁創建線程和銷燬線程需要時間。那麼有沒有一種辦法使得線程可以複用,就是執行完一個任務,並不被銷燬,而是可以繼續執行其他的任務?在Java中可以通過線程池來達到這樣的效果

1.創建java原生線程池的四種方式 

      //創建一個可緩存線程池,如果線程池長度超過處理需要,可靈活回收空閒線程,若無可回收,則新建線程。
        ExecutorService executorService = Executors.newCachedThreadPool();
        executorService.execute(new Test("1"));
        executorService.execute(new Test("2"));
        executorService.execute(new Test("3"));

        //創建一個定長線程池,可控制線程最大併發數,超出的線程會在隊列中等待
        ExecutorService executorService1 = Executors.newFixedThreadPool(2);
        executorService1.execute(new Test("1"));
        executorService1.execute(new Test("2"));
        executorService1.execute(new Test("3"));

        // 創建一個定長線程池,支持定時及週期性任務執行。
        ExecutorService executorService2 = Executors.newScheduledThreadPool(2);
        executorService2.execute(new Test("1"));
        executorService2.execute(new Test("2"));
        executorService2.execute(new Test("3"));

        //創建一個單線程化的線程池,它只會用唯一的工作線程來執行任務,保證所有任務按照指定順序(FIFO, LIFO, 優先級)執行
        ExecutorService executorService3 = Executors.newSingleThreadExecutor();
        executorService3.execute(new Test("1"));
        executorService3.execute(new Test("2"));
        executorService3.execute(new Test("3"));

2.創建Spring線程池的方式

  @Bean
    public ThreadPoolTaskExecutor createThreadPoolTaskExecutor() {
        ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor();
        threadPoolTaskExecutor.setCorePoolSize(10);
        threadPoolTaskExecutor.setMaxPoolSize(20);
        return threadPoolTaskExecutor;
    }
     @注入 taskExecutor

     taskExecutor.execute(new Test("3"));

博客地址: https://my.oschina.net/wangnian

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章