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