<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      安卓筆記俠

      專注安卓開發(fā)

      導航

      Java并發(fā)編程(十一)線程池的使用

       1.new Thread的弊端如下:

      • a. 每次new Thread新建對象性能差。
      • b. 線程缺乏統(tǒng)一管理,可能無限制新建線程,相互之間競爭,及可能占用過多系統(tǒng)資源導致死機或oom。
      • c. 缺乏更多功能,如定時執(zhí)行、定期執(zhí)行、線程中斷。

      相比new Thread,Java提供的四種線程池的好處在于:

      • a.重用線程池中存在的線程,避免因為線程的大量創(chuàng)建和銷毀所帶來的性能開銷 ,完成一項任務(wù)的時間T=創(chuàng)建線程的時間+在線程中執(zhí)行任務(wù)的時間+線程銷毀的時間, 而線程池的出現(xiàn)可以大大減少創(chuàng)建線程的時間和線程銷毀的時間,從而提高app的性能
      • b.能有限的控制線程池的最大并發(fā)數(shù),并且大量的線程互相搶占資源而導致的阻塞現(xiàn)象
      • c.對線程池中線程進行有效的跟進,當我們不需要處理的時候可以將它shutdow掉,并提供定時執(zhí)行以及制定間隔循環(huán)執(zhí)行,

        

      2、Java 線程池

      Java通過Executors提供四種線程池,分別為:
      CachedThreadPool創(chuàng)建一個可緩存線程池,如果線程池長度超過處理需要,可靈活回收空閑線程,若無可回收,則新建線程。在線程空閑60秒后終止線程。
      FixedThreadPool 創(chuàng)建一個定長線程池,可控制線程最大并發(fā)數(shù),超出的線程會在隊列中等待。
      ScheduledThreadPool 創(chuàng)建一個定長線程池,支持定時及周期性任務(wù)執(zhí)行。
      SingleThreadExecutor 創(chuàng)建一個單線程化的線程池,它只會用唯一的工作線程來執(zhí)行任務(wù),保證所有任務(wù)按照指定順序(FIFO, LIFO, 優(yōu)先級)執(zhí)行。

       

      Executors類用于管理Thread對象,簡化并發(fā)過程,我們可以看到FixedThreadPool的創(chuàng)建過程:

      public static ExecutorService newFixedThreadPool(int nThreads) {  
          return new ThreadPoolExecutor(nThreads, nThreads,   
                                       0L, TimeUnit.MILLISECONDS,  
                                        new LinkedBlockingQueue<Runnable>());  
      }  

      顯然這四種線程池方法都是返回實現(xiàn)了ExecutorService接口的ThreadPoolExecutor。當然我們也可以直接用ThreadPoolExecutor來自定義更靈活的線程池。

       

      我們先看看ThreadPoolExecutor的構(gòu)建參數(shù):

      public ThreadPoolExecutor(int corePoolSize,  
                               int maximumPoolSize,  
                              long keepAliveTime,  
                              TimeUnit unit,  
                               BlockingQueue<Runnable> workQueue,  
                              ThreadFactory threadFactory,  
                                RejectedExecutionHandler handler) 

      當池子大小小于corePoolSize就新建線程,并處理請求,當池子大小大于corePoolSize,把請求放入workQueue中,池子里的空閑線程就去從workQueue中取任務(wù)并處理,當workQueue放不下新入的任務(wù)時,新建線程入池,并處理請求,如果池子大小撐到了maximumPoolSize就用RejectedExecutionHandler來做拒絕處理。另外,當池子的線程數(shù)大于corePoolSize的時候,多余的線程會等待keepAliveTime長的時間,如果無請求可處理就自行銷毀

       

      接下來我們來看看CachedThreadPool:

      public static ExecutorService newCachedThreadPool() {  
          return new ThreadPoolExecutor(0, Integer.MAX_VALUE,  
                                       60L, TimeUnit.SECONDS,  
                                        new SynchronousQueue<Runnable>());  
      }  

      CachedThreadPool在程序執(zhí)行時會創(chuàng)建與所需數(shù)量相同的線程,然后在它回收舊線程時停止創(chuàng)建新線程,因此是Executor的首選,只有當這種方式會引發(fā)問題,或者不符合業(yè)務(wù)需要時才采用另外的三種Executor提供的線程池

      SingleThreadExecutor 就是線程數(shù)量為1的FixedThreadPool,如果向SingleThreadExecutor提交多個任務(wù),那么這些任務(wù)會排隊,每個任務(wù)都會在下個任務(wù)開始之前就結(jié)束,所有任務(wù)都用一個線程,并且按照提交的順序執(zhí)行。

       線程池用于線程數(shù)量比較多時的場景,如果只開啟2,3個線程就用線程池,顯然會極度的浪費資源

       

      http://www.rzrgm.cn/dolphin0520/p/3932921.html

      https://blog.csdn.net/qq_31694651/article/details/52184663

      posted on 2016-12-13 12:08  安卓筆記俠  閱讀(473)  評論(0)    收藏  舉報

      主站蜘蛛池模板: 激情97综合亚洲色婷婷五| 精品一二三四区在线观看| 大陆熟妇丰满多毛xxxx| 国产成人免费永久在线平台| 亚洲av永久无码精品漫画| 亚洲一区二区三区啪啪| 中文字幕国产精品综合| 色欲国产精品一区成人精品| 1区2区3区4区产品不卡码网站 | 久久精品国产99久久久古代 | 92精品国产自产在线观看481页| 丰满人妻一区二区三区无码AV| 亚洲福利精品一区二区三区| 国产精品一码在线播放| 99精品国产成人一区二区| 亚洲 中文 欧美 日韩 在线| 天祝| 久久夜色精品久久噜噜亚| 在线a级毛片无码免费真人| 黄色A级国产免费大片视频| 四虎永久在线精品免费看| 久久99精品久久久久麻豆| 国产AV无码专区亚洲AV漫画| 亚洲欧美日韩精品色xxx| 人妻激情偷一区二区三区| 无码 人妻 在线 视频| 伊人精品久久久大香线蕉| 亚洲成人资源在线观看| 黄色免费在线网址| 五月婷婷激情视频俺也去淫| 各种少妇wbb撒尿| 国产一区二区三区在线看| 亚洲色偷偷色噜噜狠狠99| 国产亚洲精品久久77777| 亚洲avav天堂av在线网爱情| 激情伊人五月天久久综合| 精品午夜福利短视频一区| 久久久亚洲欧洲日产国码农村| 永久免费av网站可以直接看的| 人人做人人妻人人精| 久久96热在精品国产高清|