国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

Java如何固定大小的線程池

瀏覽:37日期:2022-08-10 11:15:07
1.固定大小的線程池簡介

線程池就是在程序啟動的時候先建立幾個可以使用的線程放在那里,然后等著具體的任務放進去,這個任務基本可以說都是Runnable的實現類,因此它減小了系統每次新建和銷毀線程的開銷,但同時增加了維護這些線程的開銷,個中取舍看具體情況而定。

固定大小的線程池就是在啟動的時候創建了固定個數的線程放在那里等待使用。

2.包裝一個線程池對象

public class TaskPool{ private final ThreadPoolExecutor executor = (ThreadPoolExecutor)Executors.newFixedThreadPool(9); // 創建一個大小為9的固定線程池,可以按照CPU的核數初步判定,如果CPU密集性任務則創建N+1個,如果是IO密集型任務則創建2N+1個,其中N即CPU的核數 protected void shutdown(){// do something// 這個方法等待線程池中所有已提交任務執行結束,不接收新任務,然后結束executor.shutdown(); // 這個強制結束所有任務,然后正在等在的任務列表// executor.shutdownNow(); } protected void execute(Runnable command){// do something// 提交任務executor.execute(command); } public void status(){StringBuffer sb = new StringBuffer();// 當前正在執行任務的線程數sb.append(executor.getActiveCount() + 'n'); // 當前正在等待執行的線程數sb.append(executor.getQueue().size() + 'n'); // 返回已經完成的線程數sb.append(executor.getCompletedTaskCount() + 'n'); System.out.println(sb.toString());// 注:以上方法都是返回一個大概值,因為線程在執行中,這些狀態隨時都會改變 }} 3.使用線程池

public class Launcher{ private TaskPool taskPool = new TaskPool(); public static void main(String[] args){// 新建100個任務,Runnable的實現類TaskTask[] tasks = new Task[100];for (int i = 0; i < tasks.length; i++){ tasks[i] = new Task('Task ' + (i+1)); // 提交到線程池運行 taskPool.execute(task[i]); if ( i % 50 == 0){taskPool.status();} } private static class Task implements Runnable{private String name;public Task(String name){ this.name = name;}public void run(){ // do something System.out.println('我的名字是:' + this.name);} }}Java線程池小拓展線程池的介紹

1 常用的 池化技術

C3P0

DBCP

2 線程池的衍生

頻繁的創建線程對象和多線程之間進行上下文切換,是非常耗時間和資源的所以JDK1.5中提出了線程池技術

3 使用線程池

Exector

4 線程池的創建

創建一個固定大小的線程池 ( 最常用的方法 )

ExecutorService pool = Executors.newFixedThreadPool(2);Runnable task = new Runnable() {@Overridepublic void run() {while (true) {try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName());}}};pool.execute(task);pool.execute(task);pool.execute(task);//線程池的帶下只有兩個 現在這個任務在其等待隊列中排隊等候

創建可變大小的線程池

ExecutorService pool = Executors.newCachedThreadPool();Runnable task = new Runnable() {@Overridepublic void run() {while (true) {try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName());}}};pool.execute(task);pool.execute(task);pool.execute(task);

創建獨立任務的線程池

ExecutorService pool = Executors.newSingleThreadExecutor();Runnable task = new Runnable() {@Overridepublic void run() {while (true) {try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName());}}};pool.execute(task);pool.execute(task);pool.execute(task);

創建可調度的線程池

ScheduledExecutorService threadPool = Executors.newScheduledThreadPool(2);Runnable task = new Runnable() {@Overridepublic void run() {while (true) {try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName());}}};threadPool.schedule(task, 2000, TimeUnit.MILLISECONDS);

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 精品国产日韩亚洲一区在线 | 视频在线一区二区三区 | 国产又色又爽黄的网站免费 | 亚洲综合在线另类色区奇米 | 永久免费91桃色福利 | 成年免费在线观看 | 日产一一到六区网站免费 | 午夜成人在线视频 | 亚洲欧洲日产国码二区在线 | 国产在线成人一区二区 | 免费看男女做好爽好硬视频 | 亚洲美女免费视频 | xxxxxhd亚洲日本hd | 台湾三级在线播放 | 国产人成精品综合欧美成人 | 精品久久国产老人久久综合 | 国产一区二区三区亚洲欧美 | 成人欧美一区二区三区 | 男人的天堂视频在线观看 | a一级毛片 | 国产一级片儿 | 伊人久久精品午夜 | 涩涩国产精品福利在线观看 | 免费特黄 | 国产精品欧美亚洲韩国日本 | 国产精品不卡 | 女人张开双腿让男人桶爽免 | 日韩免费一级毛片欧美一级日韩片 | 玖草资源在线 | 免费在线黄色网址 | 中文字幕一区二区三区有限公司 | 老人久久www免费人成看片 | 九九视频国产 | 一区二区三区视频网站 | 日韩特级黄色片 | 男人天堂成人 | 国产精品漂亮美女在线观看 | 亚洲国产精品一区二区三区 | 亚洲精品国产精品国自产 | 久久国产精品1区2区3区网页 | 永久天堂 |