摘要:當(dāng)活動線程核心線程非核心線程達(dá)到這個數(shù)值后,后續(xù)任務(wù)將會根據(jù)來進(jìn)行拒絕策略處理。線程池工作原則當(dāng)線程池中線程數(shù)量小于則創(chuàng)建線程,并處理請求。當(dāng)線程池中的數(shù)量等于最大線程數(shù)時(shí)默默丟棄不能執(zhí)行的新加任務(wù),不報(bào)任何異常。
spring-cache使用記錄
spring-cache的使用記錄,坑點(diǎn)記錄以及采用的解決方案
在這篇文章中,作者有條不紊的將 java 線程池知識點(diǎn)的來龍去脈都介紹了一遍。
設(shè)計(jì)模式
基于源碼,分析Java線程池實(shí)現(xiàn)。
java 線程池使用和詳解
親愛的讀者朋友,如果你點(diǎn)開了這篇文章,說明你對正則很感興趣。 想必你也了解正則的重要性,在我看來正則表達(dá)式是衡量程序員水平的一個側(cè)面標(biāo)準(zhǔn)。 關(guān)于正則表達(dá)式的教程,網(wǎng)上也有很多,相信你也看了一些。 與之不同的是,本文的目的是希望所有認(rèn)真讀完的童鞋們,都有實(shí)質(zhì)性的提高。 本文內(nèi)容共…
文章一開始講了線程池的介紹和好處,然后分析了線程池中最核心的 ThreadPoolExecutor 類中構(gòu)造器的七個參數(shù)的作用、類中兩個重要的方法,然后在對比研究了下 JDK 中自帶的四種線程池的用法和內(nèi)部代碼細(xì)節(jié),最后寫了一個自定義的線程池。
有關(guān)使用Redis對并發(fā)控制的實(shí)戰(zhàn)解決方案
數(shù)據(jù)庫
整理出一些使用比較廣或者個人覺得比較好的java開源項(xiàng)目和資料供參考。
如果你覺得好但是我沒有列出的開源項(xiàng)目請告訴我,方便我添加到列表里。
如果你發(fā)現(xiàn)信息描述有誤請聯(lián)系我,我會及時(shí)修改或刪除。
文章里面的內(nèi)容會不斷進(jìn)行變更和補(bǔ)充,后續(xù)除了會新增開源項(xiàng)目,…
學(xué)習(xí)依賴注入與控制反轉(zhuǎn)
泛型是JDK1.5版本中加入的,在沒有泛型之前,從集合中讀取到的每一個對象都必須進(jìn)行轉(zhuǎn)化。如果有有人不小心插入了類型錯誤的對象,在運(yùn)行時(shí)的轉(zhuǎn)化處理就會出錯。有了泛型之后,可以告訴變一起每個集合中接受那些對象類型。編譯器自動地為你的插入進(jìn)行轉(zhuǎn)化,并在編譯時(shí)告知是否插入了類型錯誤的對象。
關(guān)于 Java 線程池的使用,及原理分析, 分析角度新穎
本文介紹關(guān)于線程池的執(zhí)行原則以及構(gòu)造方法的參數(shù)詳解。
線程池的好處引用自?http://ifeve.com/java-threadpool/?的說明:
降低資源消耗。通過重復(fù)利用已創(chuàng)建的線程降低線程創(chuàng)建和銷毀造成的消耗。
提高響應(yīng)速度。當(dāng)任務(wù)到達(dá)時(shí),任務(wù)可以不需要的等到線程創(chuàng)建就能立即執(zhí)行。
提高線程的可管理性。線程是稀缺資源,如果無限制的創(chuàng)建,不僅會消耗系統(tǒng)資源,還會降低系統(tǒng)的穩(wěn)定性,使用線程池可以進(jìn)行統(tǒng)一的分配,調(diào)優(yōu)和監(jiān)控。
創(chuàng)建線程池// 參數(shù)初始化 private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors(); // 核心線程數(shù)量大小 private static final int corePoolSize = Math.max(2, Math.min(CPU_COUNT - 1, 4)); // 線程池最大容納線程數(shù) private static final int maximumPoolSize = CPU_COUNT * 2 + 1; // 線程空閑后的存活時(shí)長 private static final int keepAliveTime = 30; // 任務(wù)過多后,存儲任務(wù)的一個阻塞隊(duì)列 BlockingQueue具體參數(shù)介紹workQueue = new SynchronousQueue<>(); // 創(chuàng)建線程的工廠 ThreadFactory threadFactory = new ThreadFactory() { private final AtomicInteger mCount = new AtomicInteger(1); public Thread newThread(Runnable r) { return new Thread(r, "AdvacnedAsyncTask #" + mCount.getAndIncrement()); } }; // 線程池任務(wù)滿載后采取的任務(wù)拒絕策略 RejectedExecutionHandler rejectHandler = new ThreadPoolExecutor.DiscardOldestPolicy(); // 線程池對象,創(chuàng)建線程 ThreadPoolExecutor mExecute = new ThreadPoolExecutor( corePoolSize, maximumPoolSize, keepAliveTime, TimeUnit.SECONDS, workQueue, threadFactory, rejectHandler );
corePoolSize
線程池的核心線程數(shù)。在沒有設(shè)置 allowCoreThreadTimeOut 為 true 的情況下,核心線程會在線程池中一直存活,即使處于閑置狀態(tài)。
maximumPoolSize
線程池所能容納的最大線程數(shù)。當(dāng)活動線程 (核心線程 + 非核心線程) 達(dá)到這個數(shù)值后,后續(xù)任務(wù)將會根據(jù) RejectedExecutionHandler 來進(jìn)行拒絕策略處理。
keepAliveTime
非核心線程 閑置時(shí)的超時(shí)時(shí)長。超過該時(shí)長,非核心線程就會被回收。若線程池通過 allowCoreThreadTimeOut() 方法設(shè)置 allowCoreThreadTimeOut 屬性為 true,則該時(shí)長同樣會作用于核心線程,AsyncTask 配置的線程池就是這樣設(shè)置的。
unit
keepAliveTime 時(shí)長對應(yīng)的單位。
workQueue
線程池中的任務(wù)隊(duì)列,通過線程池的 execute() 方法提交的 Runnable 對象會存儲在該隊(duì)列中。
ThreadFactory
線程工廠,功能很簡單,就是為線程池提供創(chuàng)建新線程的功能。這是一個接口,可以通過自定義,做一些自定義線程名的操作。
RejectedExecutionHandler
當(dāng)任務(wù)無法被執(zhí)行時(shí) (超過線程最大容量 maximum 并且 workQueue 已經(jīng)被排滿了) 的處理策略,這里有四種任務(wù)拒絕類型。線程池工作原則
1、當(dāng)線程池中線程數(shù)量小于 corePoolSize 則創(chuàng)建線程,并處理請求。
2、當(dāng)線程池中線程數(shù)量大于等于 corePoolSize 時(shí),則把請求放入 workQueue 中, 隨著線程池中的核心線程們不斷執(zhí)行任務(wù),只要線程池中有空閑的核心線程,線程池就從 workQueue 中取任務(wù)并處理。
3 、當(dāng) taskQueue 已存滿,放不下新任務(wù)時(shí)則新建非核心線程入池,并處理請求直到線程數(shù)目達(dá)到 maximumPoolSize(最大線程數(shù)量設(shè)置值)。
4、如果線程池中線程數(shù)大于 maximumPoolSize 則使用 RejectedExecutionHandler 來進(jìn)行任務(wù)拒絕處理。
任務(wù)隊(duì)列 BlockingQueue任務(wù)隊(duì)列 workQueue 是用于存放不能被及時(shí)處理掉的任務(wù)的一個隊(duì)列,它是
一個 BlockingQueue 類型。
關(guān)于 BlockingQueue,雖然它是 Queue 的子接口,但是它的主要作用并不是容器,而是作為線程同步的工具,他有一個特征,當(dāng)生產(chǎn)者試圖向 BlockingQueue 放入 (put) 元素,如果隊(duì)列已滿,則該線程被阻塞;當(dāng)消費(fèi)者試圖從 BlockingQueue 取出 (take) 元素,如果隊(duì)列已空,則該線程被阻塞。(From 瘋狂 Java 講義)任務(wù)拒絕類型
ThreadPoolExecutor.AbortPolicy:
當(dāng)線程池中的數(shù)量等于最大線程數(shù)時(shí)拋 java.util.concurrent.RejectedExecutionException 異常,涉及到該異常的任務(wù)也不會被執(zhí)行,線程池默認(rèn)的拒絕策略就是該策略。
ThreadPoolExecutor.DiscardPolicy():
當(dāng)線程池中的數(shù)量等于最大線程數(shù)時(shí), 默默丟棄不能執(zhí)行的新加任務(wù),不報(bào)任何異常。
ThreadPoolExecutor.CallerRunsPolicy():
當(dāng)線程池中的數(shù)量等于最大線程數(shù)時(shí),重試添加當(dāng)前的任務(wù);它會自動重復(fù)調(diào)用 execute()方法。
ThreadPoolExecutor.DiscardOldestPolicy():
當(dāng)線程池中的數(shù)量等于最大線程數(shù)時(shí), 拋棄線程池中工作隊(duì)列頭部的任務(wù)(即等待時(shí)間最久的任務(wù)),并執(zhí)行新傳入的任務(wù)。參考
聊聊并發(fā)(三)Java 線程池的分析和使用
Android 線程池(二)——ThreadPoolExecutor 及其拒絕策略 RejectedExecutionHandler 使用示例
多線程 線程池 ThreadPoolExecutor 介紹
本文將詳細(xì)分析 ThreadPoolExecutor 的實(shí)現(xiàn)原理,并結(jié)合源碼介紹 ThreadPoolExecutor 的重要操作,對理解 ThreadPoolExecutor 非常有幫助。本文中源碼基于 JDK1.7
本文詳細(xì)解釋了運(yùn)用反射進(jìn)行代碼編寫時(shí)遭遇到的各種常見的 Exception,以及使用反射時(shí)需要注意的一些細(xì)節(jié)問題。
ThreadPoolExecutor線程池
分析線程池源碼
代理模式是java中最常用的設(shè)計(jì)模式之一,尤其是在spring框架中廣泛應(yīng)用。對于java的代理模式,一般可分為:靜態(tài)代理、動態(tài)代理、以及CGLIB實(shí)現(xiàn)動態(tài)代理。對于上述三種代理模式,分別進(jìn)行說明。
專欄 | 九章算法 網(wǎng)址 | www.jiuzhang.com 最少操作數(shù)使數(shù)組元素相等 I 題目描述 給定一個長度為n的非空整數(shù)數(shù)組,找出使數(shù)組所有元素均相等的最少操作數(shù),其中一次操作將其中n-1個數(shù)加上1。 樣例 輸入: [1,2,3] 輸出: 3 說明: 最少3次操作到達(dá)…
主要是對hash算法中運(yùn)用到的知識進(jìn)行進(jìn)一步的解析,幫助初學(xué)者進(jìn)一步揭開hash算法的神秘面紗。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/68337.html
摘要:全文為這些年,我曾閱讀深入理解過或正在閱讀學(xué)習(xí)即將閱讀的一些優(yōu)秀經(jīng)典前端后端書籍。當(dāng)然,如果您喜歡這篇文章,可以動手點(diǎn)點(diǎn)贊或者收藏。 全文為這些年,我曾閱讀、深入理解過(或正在閱讀學(xué)習(xí)、即將閱讀)的一些優(yōu)秀經(jīng)典前端/Java后端書籍。全文為純原創(chuàng),且將持續(xù)更新,未經(jīng)許可,不得進(jìn)行轉(zhuǎn)載。當(dāng)然,如果您喜歡這篇文章,可以動手點(diǎn)點(diǎn)贊或者收藏。 基礎(chǔ) 基礎(chǔ)書籍 進(jìn)階 進(jìn)階階段,深入學(xué)習(xí)的書...
摘要:全文為這些年,我曾閱讀深入理解過或正在閱讀學(xué)習(xí)即將閱讀的一些優(yōu)秀經(jīng)典前端后端書籍。當(dāng)然,如果您喜歡這篇文章,可以動手點(diǎn)點(diǎn)贊或者收藏。 全文為這些年,我曾閱讀、深入理解過(或正在閱讀學(xué)習(xí)、即將閱讀)的一些優(yōu)秀經(jīng)典前端/Java后端書籍。全文為純原創(chuàng),且將持續(xù)更新,未經(jīng)許可,不得進(jìn)行轉(zhuǎn)載。當(dāng)然,如果您喜歡這篇文章,可以動手點(diǎn)點(diǎn)贊或者收藏。 基礎(chǔ) 基礎(chǔ)書籍 進(jìn)階 進(jìn)階階段,深入學(xué)習(xí)的書...
摘要:全文為這些年,我曾閱讀深入理解過或正在閱讀學(xué)習(xí)即將閱讀的一些優(yōu)秀經(jīng)典前端后端書籍。當(dāng)然,如果您喜歡這篇文章,可以動手點(diǎn)點(diǎn)贊或者收藏。 全文為這些年,我曾閱讀、深入理解過(或正在閱讀學(xué)習(xí)、即將閱讀)的一些優(yōu)秀經(jīng)典前端/Java后端書籍。全文為純原創(chuàng),且將持續(xù)更新,未經(jīng)許可,不得進(jìn)行轉(zhuǎn)載。當(dāng)然,如果您喜歡這篇文章,可以動手點(diǎn)點(diǎn)贊或者收藏。 基礎(chǔ) 基礎(chǔ)書籍 進(jìn)階 進(jìn)階階段,深入學(xué)習(xí)的書...
摘要:全文為這些年,我曾閱讀深入理解過或正在閱讀學(xué)習(xí)即將閱讀的一些優(yōu)秀經(jīng)典前端后端書籍。當(dāng)然,如果您喜歡這篇文章,可以動手點(diǎn)點(diǎn)贊或者收藏。 全文為這些年,我曾閱讀、深入理解過(或正在閱讀學(xué)習(xí)、即將閱讀)的一些優(yōu)秀經(jīng)典前端/Java后端書籍。全文為純原創(chuàng),且將持續(xù)更新,未經(jīng)許可,不得進(jìn)行轉(zhuǎn)載。當(dāng)然,如果您喜歡這篇文章,可以動手點(diǎn)點(diǎn)贊或者收藏。 基礎(chǔ) 基礎(chǔ)書籍 進(jìn)階 進(jìn)階階段,深入學(xué)習(xí)的書...
摘要:于是在查找了大量資料,思考著技術(shù)選型,終于決定做一個展現(xiàn)商品的全棧網(wǎng)站。當(dāng)然這個網(wǎng)站還有許許多多需要完善并增加的功能,在此之后也會不斷去完善這個網(wǎng)站。所幸的是問題都已經(jīng)解決,項(xiàng)目也順利部署。 項(xiàng)目介紹 1、作為前端的菜鳥,每每看到Github上有很多大神分享著自己的項(xiàng)目時(shí),內(nèi)心都是蠢蠢欲動,這次終于下定決心要給自己一段時(shí)間來完成屬于自己的一份作品。2、于是在查找了大量資料,思考著技術(shù)選...
閱讀 1756·2021-11-11 10:58
閱讀 4277·2021-09-09 09:33
閱讀 1285·2021-08-18 10:23
閱讀 1576·2019-08-30 15:52
閱讀 1664·2019-08-30 11:06
閱讀 1901·2019-08-29 14:03
閱讀 1536·2019-08-26 14:06
閱讀 2999·2019-08-26 10:39