久久久精品一区ed2k-女人被男人叉到高潮的视频-中文字幕乱码一区久久麻豆樱花-俄罗斯熟妇真实视频

Java線程池理解與學(xué)習(xí)-創(chuàng)新互聯(lián)

線程過多就容易引發(fā)內(nèi)存溢出,因此我們有必要使用線程池的技術(shù)

專注于為中小企業(yè)提供網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)陽曲免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上1000家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。線程池的好處

降低資源消耗: 通過重復(fù)利用已創(chuàng)建的線程降低線程創(chuàng)建和銷毀造成的消耗
提高響應(yīng)速度: 當(dāng)任務(wù)到達(dá)時(shí),任務(wù)可以不需要等待線程創(chuàng)建就能立即執(zhí)行
提高線程管理性: 線程是稀缺資源,如果無限制的創(chuàng)建,不僅會(huì)消耗系統(tǒng)資源還會(huì)降低系統(tǒng)的穩(wěn)定性,使用線程池可以進(jìn)行統(tǒng)一的分配、調(diào)優(yōu)和監(jiān)控

線程池的創(chuàng)建

線程池的真正實(shí)現(xiàn)類是ThreadPoolExecutor,其中具有七個(gè)重要參數(shù)

public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueueworkQueue,
                              ThreadFactory threadFactory,
                              RejectedExecutionHandler handler)
corePoolSize

核心線程數(shù)。默認(rèn)情況下核心線程會(huì)一直存活,但是當(dāng)將allowsCoreThreadTimeOut設(shè)置為true時(shí),核心線程也會(huì)超時(shí)回收。核心線程最開始并不會(huì)立即創(chuàng)建而是等任務(wù)來了再創(chuàng)建,然后存活下去

maximumPoolSize

大線程數(shù) 。線程池所能容納的大線程數(shù)。當(dāng)活躍線程數(shù)達(dá)到該數(shù)值后,后續(xù)的新任務(wù)將會(huì)阻塞。大線程數(shù) = 核心線程數(shù) + 非核心線程數(shù)

keepAliveTime

非核心線程閑置超時(shí)時(shí)間 。如果超過該時(shí)長(zhǎng),非核心線程將會(huì)回收

unit

超時(shí)單位 。指定KeepAliveTime超時(shí)時(shí)間的單位。

workQueue

任務(wù)隊(duì)列 。當(dāng)核心線程全被使用的時(shí)候,且任務(wù)隊(duì)列未滿時(shí)候就會(huì)先將任務(wù)放到任務(wù)隊(duì)列中

threadFactory

線程工廠 。用于指定為線程創(chuàng)建新線程的方式

handler

拒絕策略 。當(dāng)大線程數(shù)達(dá)到飽和時(shí)候需要執(zhí)行的飽和策略

任務(wù)隊(duì)列

任務(wù)隊(duì)列是基于阻塞隊(duì)列實(shí)現(xiàn)的,即采用生產(chǎn)者消費(fèi)者模式,在Java中需要實(shí)現(xiàn)BlockingQueue接口,但Java已經(jīng)為我們提供了7種阻塞隊(duì)列的實(shí)現(xiàn)

ArrayBlockingQueue

一個(gè)由數(shù)組結(jié)構(gòu)構(gòu)成的有界阻塞隊(duì)列(數(shù)組結(jié)構(gòu)可配合指針實(shí)現(xiàn)一個(gè)環(huán)形隊(duì)列)

LinkedBlockingQueue

一個(gè)由鏈表結(jié)構(gòu)構(gòu)成的有界阻塞隊(duì)列,在未指明容量時(shí)默認(rèn)為Integer.MAX_VALUE

PriorityBlockingQueue

一個(gè)支持優(yōu)先級(jí)排序的無界隊(duì)列,對(duì)元素沒有要求,可以實(shí)現(xiàn)Comparable接口來進(jìn)行比較

DelayQueue

類似于PriorityBlockingQueue,是二叉堆形成的無界優(yōu)先隊(duì)列。要求元素都實(shí)現(xiàn)DelayQueue接口,通過執(zhí)行時(shí)延從隊(duì)列中提取任務(wù),時(shí)間沒到任務(wù)取不出來

SynchronousQueue

一個(gè)不存儲(chǔ)元素的阻塞隊(duì)列,消費(fèi)者線程調(diào)用take()方法時(shí)會(huì)發(fā)生阻塞,直到有一個(gè)生產(chǎn)者生產(chǎn)了一個(gè)元素,同理生產(chǎn)者調(diào)用put()方法

LinkedBlockingDeque

使用雙向隊(duì)列實(shí)現(xiàn)的有界雙端阻塞隊(duì)列。雙端意味著可以像普通隊(duì)列一樣FIFO也可以像棧一樣FILO

LinkedTransferQueue

這是一個(gè)無界隊(duì)列

拒絕策略

當(dāng)線程池的線程達(dá)到大線程數(shù)時(shí),需要執(zhí)行拒絕策略,拒絕策略需要實(shí)現(xiàn)RejectedExecutionHandler接口,并實(shí)現(xiàn)rejectedExcution方法,Executors為我們實(shí)現(xiàn)了4種拒絕策略

  1. AbortPolicy(默認(rèn)):丟棄任務(wù)并拋出異常
  2. CallerRunsPolicy:由調(diào)用線程處理該任務(wù)
  3. DiscardPolicy:丟棄任務(wù),但是不拋出異常
  4. DiscardOldestPolicy:丟棄隊(duì)列中最早未處理的異常

在這里插入圖片描述

功能線程池 定長(zhǎng)線程池(newFixedThreadPool)
public static ExecutorService newFixedThreadPool(int nThreads) {return new ThreadPoolExecutor(nThreads, nThreads,
                                      0L, TimeUnit.MILLISECONDS,
                                      new LinkedBlockingQueue());
    }
    public static ExecutorService newFixedThreadPool(int nThreads, ThreadFactory threadFactory) {return new ThreadPoolExecutor(nThreads, nThreads,
                                      0L, TimeUnit.MILLISECONDS,
                                      new LinkedBlockingQueue(),
                                      threadFactory);
    }

特點(diǎn) : 只有核心線程,線程數(shù)量固定,全是核心線程任務(wù)隊(duì)列為鏈表的有界隊(duì)列
應(yīng)用場(chǎng)景: 控制線程大并發(fā)數(shù)
缺點(diǎn): 他的任務(wù)隊(duì)列是LinkedBlockingQueue且沒有指定容量,則當(dāng)線程數(shù)滿了之后就會(huì)一直放任務(wù)進(jìn)任務(wù)隊(duì)列,容易造成OOM

單線程化線程池(newSingleThreadExecutor)
public static ExecutorService newSingleThreadExecutor() {return new FinalizableDelegatedExecutorService
            (new ThreadPoolExecutor(1, 1,
                                    0L, TimeUnit.MILLISECONDS,
                                    new LinkedBlockingQueue()));
    }

與上面類似

可緩存線程池(newCachedThreadPool)
public static ExecutorService newCachedThreadPool() {return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
                                      60L, TimeUnit.SECONDS,
                                      new SynchronousQueue());
    }

特點(diǎn):沒有核心線程數(shù)只有非核心線程數(shù),整個(gè)線程池表現(xiàn)為線程池?cái)?shù)會(huì)根據(jù)任務(wù)量不斷增長(zhǎng),沒有增長(zhǎng),當(dāng)任務(wù)執(zhí)行完畢,空閑1分鐘后釋放線程
用途 :適合任務(wù)數(shù)比較密集,但每個(gè)任務(wù)執(zhí)行時(shí)間較短的情況
缺點(diǎn) : 如果任務(wù)多那么線程就會(huì)創(chuàng)建過多的線程,創(chuàng)建線程會(huì)很耗時(shí)并且容易導(dǎo)致OOM

定時(shí)線程池(newScheduledThreadPool)
public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize) {return new ScheduledThreadPoolExecutor(corePoolSize);
    }

    public ScheduledThreadPoolExecutor(int corePoolSize) {super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS,
              new DelayedWorkQueue());
    }

特點(diǎn): 和性能線程固定,非核心線程很多,執(zhí)行完立即刪除
應(yīng)用場(chǎng)景: 執(zhí)行定時(shí)或周期性的任務(wù)
缺點(diǎn): 線程數(shù)量上限是Integer.MAX_VALUE

線程池中的方法

void execute(Runnable command);
執(zhí)行任務(wù)

Future submit(Callable task)
提交任務(wù)task,用返回值Future獲取任務(wù)執(zhí)行結(jié)果

ListinvokeAll(Collectiontasks)
提交tasks中所有的任務(wù)

ListinvokeAll(Collectiontasks, long timeout, TimeUnit unit)
提交tasks中所有的任務(wù)帶超時(shí)時(shí)間

T invokeAny(Collectiontasks)
提交tasks中的任務(wù)那個(gè)先執(zhí)行完畢返回該任務(wù)的結(jié)果其它任務(wù)取消

T invokeAny(Collectiontasks,long timeout, TimeUnit unit)
提交tasks中的任務(wù)那個(gè)先執(zhí)行完畢返回該任務(wù)的結(jié)果其它任務(wù)取消帶超時(shí)時(shí)間

shutdown與shutdownnow

shutdown
線程池狀態(tài)修改為SHUTDOWN
不會(huì)接收新的任務(wù),但已提交的會(huì)執(zhí)行完, 只打斷空閑線程

shutdownnow
修改線程池狀態(tài)為stop
不接收新任務(wù)、打斷所有線程、會(huì)將隊(duì)列中的任務(wù)返回

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

分享文章:Java線程池理解與學(xué)習(xí)-創(chuàng)新互聯(lián)
分享URL:http://sd-ha.com/article44/eooee.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)外貿(mào)建站、靜態(tài)網(wǎng)站、自適應(yīng)網(wǎng)站、做網(wǎng)站網(wǎng)站內(nèi)鏈

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)