欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java如何固定大小的線程池

 更新時(shí)間:2021年06月19日 10:57:17   作者:蛋黃酥要不要來一口  
這篇文章主要介紹了Java固定大小的線程池操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

1.固定大小的線程池簡介

線程池就是在程序啟動(dòng)的時(shí)候先建立幾個(gè)可以使用的線程放在那里,然后等著具體的任務(wù)放進(jìn)去,這個(gè)任務(wù)基本可以說都是Runnable的實(shí)現(xiàn)類,因此它減小了系統(tǒng)每次新建和銷毀線程的開銷,但同時(shí)增加了維護(hù)這些線程的開銷,個(gè)中取舍看具體情況而定。

固定大小的線程池就是在啟動(dòng)的時(shí)候創(chuàng)建了固定個(gè)數(shù)的線程放在那里等待使用。

2.包裝一個(gè)線程池對(duì)象

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

3.使用線程池

public class Launcher{
    private TaskPool taskPool = new TaskPool();
    public static void main(String[] args){
        // 新建100個(gè)任務(wù),Runnable的實(shí)現(xiàn)類Task
        Task[] tasks = new Task[100];
        for (int i = 0; i < tasks.length; i++){
            tasks[i] = new Task("Task " + (i+1));
            // 提交到線程池運(yùn)行
            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 常用的 池化技術(shù)

C3P0

DBCP

2 線程池的衍生

頻繁的創(chuàng)建線程對(duì)象和多線程之間進(jìn)行上下文切換,是非常耗時(shí)間和資源的所以JDK1.5中提出了線程池技術(shù)

3 使用線程池

Exector

4 線程池的創(chuàng)建

創(chuàng)建一個(gè)固定大小的線程池 ( 最常用的方法 )

ExecutorService pool = Executors.newFixedThreadPool(2);
Runnable task = new Runnable() {
@Override
public 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);//線程池的帶下只有兩個(gè) 現(xiàn)在這個(gè)任務(wù)在其等待隊(duì)列中排隊(duì)等候

創(chuàng)建可變大小的線程池

ExecutorService pool = Executors.newCachedThreadPool();
Runnable task = new Runnable() {
@Override
public 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);

創(chuàng)建獨(dú)立任務(wù)的線程池

ExecutorService pool = Executors.newSingleThreadExecutor();
Runnable task = new Runnable() {
@Override
public 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);

創(chuàng)建可調(diào)度的線程池

ScheduledExecutorService threadPool = Executors.newScheduledThreadPool(2);
Runnable task = new Runnable() {
@Override
public 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);

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot集成slf4j日志配置的方法

    SpringBoot集成slf4j日志配置的方法

    本文主要介紹了SpringBoot集成slf4j日志配置的方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Java實(shí)現(xiàn)圖片切割功能

    Java實(shí)現(xiàn)圖片切割功能

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)圖片切割功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 深入理解SpringBoot中關(guān)于Mybatis使用方法

    深入理解SpringBoot中關(guān)于Mybatis使用方法

    這篇文章主要介紹了SpringBoot中關(guān)于Mybatis使用方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-03-03
  • SpringBoot環(huán)境搭建圖文教程

    SpringBoot環(huán)境搭建圖文教程

    這篇文章主要為大家詳細(xì)介紹了SpringBoot環(huán)境搭建圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • java實(shí)現(xiàn)人員信息管理系統(tǒng)

    java實(shí)現(xiàn)人員信息管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)人員信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 使用WebUploader實(shí)現(xiàn)上傳文件功能(一)

    使用WebUploader實(shí)現(xiàn)上傳文件功能(一)

    這篇文章主要為大家詳細(xì)介紹了使用WebUploader實(shí)現(xiàn)上傳文件功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Java字符編碼原理(動(dòng)力節(jié)點(diǎn)Java學(xué)院整理)

    Java字符編碼原理(動(dòng)力節(jié)點(diǎn)Java學(xué)院整理)

    Java開發(fā)中,常常會(huì)遇到亂碼的問題,一旦遇到這種問題,常常比較煩惱,大家都不想承認(rèn)是自己的代碼問題,其實(shí)搞明白編碼的本質(zhì)過程就簡單多了,接下來小編給大家?guī)韏ava字符編碼原理,要求看看吧
    2017-04-04
  • Spring中使用JSR303請(qǐng)求約束判空的實(shí)現(xiàn)

    Spring中使用JSR303請(qǐng)求約束判空的實(shí)現(xiàn)

    這篇文章主要介紹了Spring中使用JSR303請(qǐng)求約束判空的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • JavaFx實(shí)現(xiàn)登錄成功跳轉(zhuǎn)到程序主頁面

    JavaFx實(shí)現(xiàn)登錄成功跳轉(zhuǎn)到程序主頁面

    這篇文章主要為大家詳細(xì)介紹了JavaFx實(shí)現(xiàn)登錄成功跳轉(zhuǎn)到程序主頁面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • 使用Java實(shí)現(xiàn)KMZ和KML數(shù)據(jù)的直接解析

    使用Java實(shí)現(xiàn)KMZ和KML數(shù)據(jù)的直接解析

    本文主要講解如何用JAVA語言,直接解析KMZ數(shù)據(jù),文章首先介紹google地圖中的KMZ和KML數(shù)據(jù),然后使用代碼的方式實(shí)現(xiàn)數(shù)據(jù)的解析,最后展示解析成果以及如何將數(shù)據(jù)轉(zhuǎn)換成空間WKT數(shù)據(jù),需要的朋友可以參考下
    2024-06-06

最新評(píng)論