成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Java怎么配置線程池

這篇文章主要為大家展示了Java怎么配置線程池,內(nèi)容簡(jiǎn)而易懂,希望大家可以學(xué)習(xí)一下,學(xué)習(xí)完之后肯定會(huì)有收獲的,下面讓小編帶大家一起來看看吧。

創(chuàng)新互聯(lián)建站一直秉承“誠信做人,踏實(shí)做事”的原則,不欺瞞客戶,是我們最起碼的底線! 以服務(wù)為基礎(chǔ),以質(zhì)量求生存,以技術(shù)求發(fā)展,成交一個(gè)客戶多一個(gè)朋友!為您提供成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、成都網(wǎng)頁設(shè)計(jì)、微信小程序開發(fā)、成都網(wǎng)站開發(fā)、成都網(wǎng)站制作、成都軟件開發(fā)、重慶App定制開發(fā)是成都本地專業(yè)的網(wǎng)站建設(shè)和網(wǎng)站設(shè)計(jì)公司,等你一起來見證!

線程池中,常見有涉及到的:

ExecutorService executorService = Executors.newSingleThreadExecutor();
ExecutorService executorService1 = Executors.newCachedThreadPool();
ExecutorService executorService2 = Executors.newFixedThreadPool(3);

關(guān)于Executors和ExecutorService從記憶上類似于Collections和List。

但是以上幾種其實(shí)不建議使用。最好可以通過自己手動(dòng)配置ThreadPoolExecutor的形式。

我先創(chuàng)建一個(gè)demo:

ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
        2,
        5,
        1L,
        TimeUnit.SECONDS,
        new ArrayBlockingQueue<Runnable>(3),
        Executors.defaultThreadFactory(),
        new ThreadPoolExecutor.AbortPolicy()
    );

涉及7個(gè)參數(shù),按順序分別是

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

具體我首先需要結(jié)合參數(shù)解釋下線程池的執(zhí)行原理:

畫了張圖:

Java怎么配置線程池

如果我用銀行辦理業(yè)務(wù)示例說明如下:

1、首先銀行里面有兩個(gè)柜臺(tái),這就是核心線程數(shù)(7大參數(shù)之一)。

2、然后隨著客戶的增加,可能這個(gè)兩個(gè)柜臺(tái)滿了,然后就要請(qǐng)用戶到等候區(qū)里面進(jìn)行等待。這個(gè)等候區(qū)就是相當(dāng)于阻塞隊(duì)列(七大參數(shù)之一)。

3、然后緊接著客戶越來越多,連阻塞隊(duì)列都撐不住了,這個(gè)時(shí)候,就要請(qǐng)求,上面的領(lǐng)導(dǎo)進(jìn)行多增加柜臺(tái)的操作,這個(gè)時(shí)候,可能加了三個(gè)柜臺(tái),現(xiàn)在就有5個(gè)柜臺(tái)了。這個(gè)時(shí)候最大的線程數(shù)(七大參數(shù)之一)就是5了。

4、但是這個(gè)時(shí)候可能客戶又越來越多,這個(gè)時(shí)候新加的柜臺(tái)也受不了,就要開始有拒絕策略了(七大參數(shù)之一)

5、然后過了一段時(shí)間,慢慢的,客戶越來越少了,這個(gè)時(shí)候,發(fā)現(xiàn)漸漸的,柜臺(tái)空余出來了。KeepAliveTime(七大參數(shù)之一,加上單位,合計(jì)兩個(gè)參數(shù))指當(dāng)線程數(shù)大于核心線程數(shù)時(shí),此為終止前多余的空閑線程等待新任務(wù)的最長(zhǎng)時(shí)間。

6、還有一個(gè)參數(shù)是工廠,這個(gè)我們不做深入研究,直接用默認(rèn)的工廠即可。

懂得原理以后,我們可以查看下,為什么最好不要直接用,比如:

Executors.newFixedThreadPool(3);

這個(gè)的主要原因就是這里面默認(rèn)隊(duì)列的最大值是Integer的最大值。

Java怎么配置線程池

Java怎么配置線程池

所以我們生產(chǎn)中需要自己配置線程池。因?yàn)槟J(rèn)隊(duì)列的長(zhǎng)度太長(zhǎng)了,有可能會(huì)導(dǎo)致oom。就是內(nèi)存炸掉了。

這個(gè)在阿里的編程思想里面也有說明這一點(diǎn):

Java怎么配置線程池

這邊我們探討下,拒絕策略。4種策略。就是所有柜臺(tái)和等候區(qū)全部滿了。會(huì)如何處理。

用非常easy的代碼來過下,這塊的內(nèi)容:

1、AbortPolicy

import java.util.concurrent.*;

public class VolatileTest {
  public static void main(String[] args) throws Exception {
    ExecutorService executorService = new ThreadPoolExecutor(
        2,
        5,
        1L,
        TimeUnit.SECONDS,
        new ArrayBlockingQueue<Runnable>(3),
        Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy()
    );

    try {
      for (int i = 0; i < 9; i++) {
        executorService.execute(new Runnable() {
          @Override
          public void run() {
            System.out.println(Thread.currentThread().getName()+"\t"+"辦理業(yè)務(wù)");
          }
        });
      }
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
    }

  }
}

Java怎么配置線程池

可以看到如果超出的話直接掛了,阻止正常運(yùn)行。

2、CallerRunsPolicy

輸出

Java怎么配置線程池

發(fā)現(xiàn)有一個(gè)退回main線程,被main線程處理。即會(huì)把任務(wù)退回至調(diào)用者。

3、DiscardOldestPolicy

這個(gè)將會(huì)等待時(shí)間最久的任務(wù)丟掉。

4、DiscardPolicy

多出來的任務(wù)會(huì)全部丟掉。

以上就是關(guān)于Java怎么配置線程池的內(nèi)容,如果你們有學(xué)習(xí)到知識(shí)或者技能,可以把它分享出去讓更多的人看到。

本文名稱:Java怎么配置線程池
鏈接地址:http://jinyejixie.com/article24/gdpgje.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、微信小程序、外貿(mào)網(wǎng)站建設(shè)關(guān)鍵詞優(yōu)化、定制開發(fā)品牌網(wǎng)站建設(shè)

廣告

聲明:本網(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)

外貿(mào)網(wǎng)站制作
定边县| 阿巴嘎旗| 华蓥市| 华安县| 菏泽市| 遂昌县| 延长县| 泰和县| 察雅县| 孝义市| 宜昌市| 长治市| 福鼎市| 郧西县| 高邑县| 盐亭县| 天等县| 浦北县| 石台县| 枞阳县| 奉化市| 陆河县| 会昌县| 漳平市| 固原市| 清水县| 郯城县| 双城市| 渭源县| 莆田市| 杂多县| 兖州市| 甘肃省| 庄河市| 宁德市| 昭通市| 河北区| 柳河县| 茌平县| 进贤县| 宁都县|