色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

您好,歡迎來電子發燒友網! ,新用戶?[免費注冊]

您的位置:電子發燒友網>源碼下載>java源碼下載>

java自帶的線程池方法

大小:0.3 MB 人氣:0 2017-09-27 需要積分:1
二、原理分析
  從上面使用線程池的例子來看,最主要就是兩步,構造ThreadPoolExecutor對象,然后每來一個任務,就調用ThreadPoolExecutor對象的execute方法。
  1、ThreadPoolExecutor結構
  ThreadPoolExecutor的主要結構及繼承關系如下圖所示:
  主要成員變量:任務隊列——存放那些暫時無法執行的任務;工作線程池——存放當前啟用的所有線程;線程工廠——創建線程;還有一些用來調度線程與任務并保證線程安全的成員。
  了解了ThreadPoolExecutor的主要結構,再簡單梳理一下“一個傳入線程池的任務能夠被最終正常執行需要經過的主要流程”,方法名稱前面沒有“XXX.”這種標注的都是ThreadPoolExecutor的方法:
  2、ThreadPoolExecutor構造器及重要常量
  簡單了解下構造器,ThreadPoolExecutor的四個構造器的源碼如下:
  publicThreadPoolExecutor( intcorePoolSize, intmaximumPoolSize,longkeepAliveTime,TimeUnit unit,BlockingQueue《Runnable》 workQueue) {this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,Executors.defaultThreadFactory(), defaultHandler); }publicThreadPoolExecutor( intcorePoolSize, intmaximumPoolSize,longkeepAliveTime,TimeUnit unit,BlockingQueue《Runnable》 workQueue,ThreadFactory threadFactory) { this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,threadFactory, defaultHandler); } publicThreadPoolExecutor( intcorePoolSize,intmaximumPoolSize, longkeepAliveTime,TimeUnit unit,BlockingQueue《Runnable》 workQueue,RejectedExecutionHandler handler) { this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,Executors.defaultThreadFactory(), handler); }publicThreadPoolExecutor( intcorePoolSize, intmaximumPoolSize,longkeepAliveTime,TimeUnit unit,BlockingQueue《Runnable》 workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler) { if(corePoolSize 《0||maximumPoolSize 《= 0||maximumPoolSize 《 corePoolSize ||keepAliveTime 《 0)thrownewIllegalArgumentException(); if(workQueue == null|| threadFactory == null|| handler == null) thrownewNullPointerException(); this.acc = System.getSecurityManager() == null? null:AccessController.getContext(); this.corePoolSize = corePoolSize;this.maximumPoolSize = maximumPoolSize; this.workQueue = workQueue;this.keepAliveTime = unit.toNanos(keepAliveTime); this.threadFactory = threadFactory;this.handler = handler; }
  從源碼中可以看出,這四個構造器都是調用最后一個構造器,只是根據開發者傳入的參數的不同而填充一些默認的參數。比如如果開發者沒有傳入線程工廠threadFactory參數,那么構造器就使用默認的Executors.defaultThreadFactor。
  在這里還要理解ThreadPoolExecutor的幾個常量的含義和幾個簡單方法:
  //Integer.SIZE是一個靜態常量,值為32,也就是說COUNT_BITS是29privatestaticfinalintCOUNT_BITS = Integer.SIZE - 3; //CAPACITY是最大容量536870911,因為1左移29位之后-1,導致最高三位為0,而其余29位全部為1privatestaticfinalintCAPACITY = ( 1《《 COUNT_BITS) - 1; //ctl用于表示線程池狀態和有效線程數量,最高三位表示線程池的狀態,其余低位表示有效線程數量//初始化之后ctl等于RUNNING的值,即默認狀態是運行狀態,線程數量為0privatefinalAtomicInteger ctl =newAtomicInteger(ctlOf(RUNNING, 0)); //1110 0000 0000 0000 0000 0000 0000 0000最高三位為111privatestaticfinalintRUNNING = - 1《《 COUNT_BITS; //最高三位為000privatestaticfinalintSHUTDOWN = 0《《 COUNT_BITS; //0010 0000 0000 0000 0000 0000 0000 0000最高三位為001privatestaticfinalintSTOP = 1《《 COUNT_BITS; //0100 0000 0000 0000 0000 0000 0000 0000最高三位為010privatestaticfinalintTIDYING = 2《《 COUNT_BITS; //0110 0000 0000 0000 0000 0000 0000 0000最高三位為011privatestaticfinalintTERMINATED = 3《《 COUNT_BITS; /** * 獲取運行狀態,入參為ctl。因為CAPACITY是最高三位為0,其余低位為1 * 所以當取反的時候,就只有最高三位為1,再經過與運算,只會取到ctl的最高三位 * 而這最高三位如上文所述,表示線程池的狀態 */privatestaticintrunStateOf( intc) { returnc & ~CAPACITY; } /** * 獲取工作線程數量,入參為ctl。因為CAPACITY是最高三位為0,其余低位為1 * 所以當進行與運算的時候,只會取到低29位,這29位正好表示有效線程數量 */privatestaticintworkerCountOf( intc) { returnc & CAPACITY; } privatestaticintctlOf( intrs, intwc) { returnrs | wc; } //任務隊列,用于存放待執行任務的阻塞隊列privatefinalBlockingQueue《Runnable》 workQueue; /** 判斷線程池是否是運行狀態,傳入的參數是ctl的值 * 只有RUNNING的符號位是1,也就是只有RUNNING為負數 * 所以如果目前的ctl值《0,就是RUNNING狀態 */privatestaticbooleanisRunning(intc) { returnc 《 SHUTDOWN; } //從任務隊列中移除任務publicbooleanremove(Runnable task) { booleanremoved = workQueue.remove(task); tryTerminate(); // In case SHUTDOWN and now emptyreturnremoved; }

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

用戶評論

      ?
      主站蜘蛛池模板: yellow日本动漫高清 | 暖暖日本大全免费观看 | 在线播放无码字幕亚洲 | 绑着男军人的扒开内裤 | 亚洲AV精品无码喷水直播间 | 超碰在线视频人人AV | 色呦呦导航 | 高h喷水荡肉爽文总攻 | 欧美国产精品久久久乱码 | 神马影院午夜伦理限级 | 国产亚洲精品久久无码98 | 99草在线观看 | 97在线视频免费播放 | 一道本在线伊人蕉无码 | 亚洲第一页在线播放 | 欧美性黑吊xxx | 成人网视频在线观看免费 | 久久精品天天中文字幕 | 国产精品自在在线午夜精品 | 2018高清国产一区二区三区 | 特黄AAAAAAA片免费视频 | 国产乱码卡二卡三卡4W | 97人人超碰国产精品最新蜜芽 | 亚洲欧美一级久久精品 | 午夜办公室在线观看高清电影 | 亚洲精品乱码电影在线观看 | 久久re热在线视频精99 | 蜜臀久久99精品久久久久久做爰 | 凹凸精品视频分类视频 | 一个人HD高清在线观看免费视频 | 国产精品日本欧美一区二区 | 色久久综合视频本道88 | 又爽又黄又粗又大免费视频 | 日本性xxx| 男生插曲女生身全过程 | 亚洲精品久久一区二区三区四区 | 免费高清在线影片一区 | 亚洲 欧美 中文 日韩 另类 | 1313久久国产午夜精品理论片 | 色99蜜臀AV无码| 欧式午夜理伦三级在线观看 |