最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java詳解使用線程池處理任務(wù)方法

 更新時(shí)間:2022年05月07日 11:38:33   作者:遇安.112  
java中經(jīng)常需要用到多線程來(lái)處理,我們非常不建議單純使用繼承Thread或者實(shí)現(xiàn)Runnable接口的方式來(lái)創(chuàng)建線程,那樣勢(shì)必有創(chuàng)建及銷毀線程耗費(fèi)資源、線程上下文切換問(wèn)題。同時(shí)創(chuàng)建過(guò)多的線程也可能引發(fā)資源耗盡的風(fēng)險(xiǎn),這個(gè)時(shí)候引入線程池比較合理,方便線程任務(wù)的管理

什么是線程池?

線程池就是一個(gè)可以復(fù)用線程的技術(shù)。

不使用線程池的問(wèn)題:

如果用戶每發(fā)起一個(gè)請(qǐng)求,后臺(tái)就創(chuàng)建一個(gè)新線程來(lái)處理,下次新任務(wù)來(lái)了又要?jiǎng)?chuàng)建新線程,而創(chuàng)建新線程的開(kāi)銷是很大的,這樣會(huì)嚴(yán)重影響系統(tǒng)的性能。

線程池常見(jiàn)面試題:

1、臨時(shí)線程什么時(shí)候創(chuàng)建?

新任務(wù)提交時(shí)發(fā)現(xiàn)核心線程都在忙,任務(wù)隊(duì)列也滿了,并且還可以創(chuàng)建臨時(shí)線程,此時(shí)才會(huì)創(chuàng)建臨時(shí)線程。

2、什么時(shí)候會(huì)開(kāi)始拒絕任務(wù)?

核心線程和臨時(shí)線程都在忙,任務(wù)隊(duì)列也滿了,新的任務(wù)過(guò)來(lái)的時(shí)候才會(huì)開(kāi)始任務(wù)拒絕。

1、線程池處理Runnable任務(wù)

import java.util.concurrent.*;
public class 多線程_5線程池處理Runnable任務(wù) {
    public static void main(String[] args) {
        //線程池處理Runnable任務(wù)
        //創(chuàng)建線程池對(duì)象
        /*
         public ThreadPoolExecutor(int corePoolSize,//核心線程數(shù)量
                              int maximumPoolSize,//線程池可支持的最大線程數(shù)量
                              long keepAliveTime,//臨時(shí)線程的最大存活時(shí)間
                              TimeUnit unit,//指定存活時(shí)間的單位(秒,分等)
                              BlockingQueue<Runnable> workQueue,//指定任務(wù)隊(duì)列
                              ThreadFactory threadFactory,//指定用哪個(gè)線程工廠創(chuàng)建線程
                              RejectedExecutionHandler handler)//指定線程忙,任務(wù)滿了的時(shí)候,新任務(wù)來(lái)了怎么辦
         */
        ExecutorService pool=new ThreadPoolExecutor(3,5,
                6, TimeUnit.SECONDS,new ArrayBlockingQueue<>(5),
                Executors.defaultThreadFactory(),new ThreadPoolExecutor.AbortPolicy());
        //給任務(wù)線程池處理
        Runnable r=new MyExe();
        //三個(gè)核心線程
        pool.execute(r);
        pool.execute(r);
        pool.execute(r);
        //五個(gè)任務(wù)隊(duì)列(不創(chuàng)建臨時(shí)線程時(shí),會(huì)發(fā)現(xiàn)只有三個(gè)線程,即核心線程量)
        pool.execute(r);
        pool.execute(r);
        pool.execute(r);
        pool.execute(r);
        pool.execute(r);
        //創(chuàng)建臨時(shí)線程(五個(gè)線程,即最大線程量)
        pool.execute(r);
        pool.execute(r);
        //不創(chuàng)建,拒絕策略被觸發(fā)
       // pool.execute(r);
        //關(guān)閉線程池(開(kāi)發(fā)中一般不會(huì)使用)
//        pool.shutdownNow();//立即關(guān)閉,即使任務(wù)沒(méi)有執(zhí)行完畢。會(huì)丟失任務(wù)的!
//        pool.shutdown();//會(huì)等待任務(wù)全部執(zhí)行完畢后再關(guān)閉(建議使用)
    }
}
class MyExe implements Runnable{
    public void run(){
        for (int i = 1; i <=6 ; i++) {
            System.out.println(Thread.currentThread().getName()+"正在執(zhí)行:"+i+"次");
        }
        //因?yàn)楫?dāng)前案例任務(wù)太簡(jiǎn)單,我們需要?jiǎng)?chuàng)建臨時(shí)隊(duì)列需要讓三個(gè)核心線程忙,五個(gè)任務(wù)隊(duì)列排滿,所以讓線程休眠以增加任務(wù)時(shí)間
        try {
            System.out.println(Thread.currentThread().getName()+"任務(wù)與線程綁定,線程進(jìn)入了休眠");
            Thread.sleep(1000000);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

2、線程池處理Callable任務(wù)

import java.util.concurrent.*;
public class 多線程_5線程池處理Callable任務(wù) {
    public static void main(String[] args) throws Exception {
        //線程池處理Callable任務(wù)
        //創(chuàng)建線程池對(duì)象
        /*
         public ThreadPoolExecutor(int corePoolSize,//核心線程數(shù)量
                              int maximumPoolSize,//線程池可支持的最大線程數(shù)量
                              long keepAliveTime,//臨時(shí)線程的最大存活時(shí)間
                              TimeUnit unit,//指定存活時(shí)間的單位(秒,分等)
                              BlockingQueue<Runnable> workQueue,//指定任務(wù)隊(duì)列
                              ThreadFactory threadFactory,//指定用哪個(gè)線程工廠創(chuàng)建線程
                              RejectedExecutionHandler handler)//指定線程忙,任務(wù)滿了的時(shí)候,新任務(wù)來(lái)了怎么辦
         */
        ExecutorService pool=new ThreadPoolExecutor(3,5,
                6, TimeUnit.SECONDS,new ArrayBlockingQueue<>(5),
                Executors.defaultThreadFactory(),new ThreadPoolExecutor.AbortPolicy());
        //給任務(wù)線程池處理
//        Callable c=new MyCallable2(100);
//        pool.submit(c);
       Future<String> f1=pool.submit(new MyCallable2(100));
        Future<String> f2=pool.submit(new MyCallable2(200));
        Future<String> f3=pool.submit(new MyCallable2(300));
        Future<String> f4=pool.submit(new MyCallable2(400));
        Future<String> f5=pool.submit(new MyCallable2(500));
//        String str=f1.get();
//        System.out.println(str);
        System.out.println(f1.get());
        System.out.println(f2.get());
        System.out.println(f3.get());
        System.out.println(f4.get());
        System.out.println(f5.get());
    }
}
class MyCallable2 implements Callable<String> {
    //                               v(泛型)
    private int n;
    public MyCallable2(int n) {
        this.n = n;
    }
    //重寫call方法
    //案例:加法
    public String call() throws Exception {
        int sum = 0;
        for (int i = 1; i <=n; i++) {
            sum += i;
        }
        return Thread.currentThread().getName()+"執(zhí)行 1-"+n+"的和,結(jié)果為:" + sum;
    }
}

到此這篇關(guān)于Java詳解使用線程池處理任務(wù)方法的文章就介紹到這了,更多相關(guān)Java線程池內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java實(shí)現(xiàn)的文件過(guò)濾代碼分享(按后輟過(guò)濾)

    Java實(shí)現(xiàn)的文件過(guò)濾代碼分享(按后輟過(guò)濾)

    這篇文章主要介紹了Java實(shí)現(xiàn)的文件過(guò)濾代碼分享,本文通過(guò)后輟名過(guò)濾,代碼寫簡(jiǎn)潔,容易看懂,需要的朋友可以參考下
    2014-07-07
  • Spring框架中Bean的各種加載方式詳解

    Spring框架中Bean的各種加載方式詳解

    這篇文章主要介紹了Spring框架中Bean的各種加載方式詳解,在Java中,"Bean"通常指的是由Spring框架管理的對(duì)象實(shí)例,Spring提供了多種方式來(lái)加載Bean,以滿足不同的需求和場(chǎng)景,需要的朋友可以參考下
    2023-08-08
  • Java如何在Map中存放重復(fù)key

    Java如何在Map中存放重復(fù)key

    這篇文章主要介紹了Java如何在Map中存放重復(fù)key,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • SpringBoot讀取properties配置文件中的數(shù)據(jù)的三種方法

    SpringBoot讀取properties配置文件中的數(shù)據(jù)的三種方法

    本文主要介紹了SpringBoot讀取properties配置文件中的數(shù)據(jù)的三種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • 教你在JNA中將本地方法映射到JAVA代碼中的示例

    教你在JNA中將本地方法映射到JAVA代碼中的示例

    對(duì)于JNI來(lái)說(shuō),我們可以使用native關(guān)鍵字來(lái)定義本地方法。那么在JNA中有那些在JAVA代碼中定義本地方法的方式呢?對(duì)JNA本地方法映射JAVA代碼的相關(guān)知識(shí)感興趣的朋友一起看看吧
    2022-04-04
  • 一文帶你深入剖析Java線程池的前世今生

    一文帶你深入剖析Java線程池的前世今生

    這篇文章主要帶大家介紹了深入剖析一下Java線程池的前世今生,了解線程池的原理以及為什么需要線程池。文中的示例代碼講解詳細(xì),需要的可以參考一下
    2022-10-10
  • java高并發(fā)下解決AtomicLong性能瓶頸方案LongAdder

    java高并發(fā)下解決AtomicLong性能瓶頸方案LongAdder

    這篇文章主要為大家介紹了java高并發(fā)下解決AtomicLong性能瓶頸方案LongAdder,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • 深入解析Java的Servlet過(guò)濾器的原理及其應(yīng)用

    深入解析Java的Servlet過(guò)濾器的原理及其應(yīng)用

    這篇文章主要介紹了深入解析Java的Servlet過(guò)濾器的原理及應(yīng)用,Java編寫的Servlet通常是一個(gè)與網(wǎng)頁(yè)一起作用于瀏覽器客戶端的程序,需要的朋友可以參考下
    2016-01-01
  • Java使用注解實(shí)現(xiàn)防止重復(fù)提交實(shí)例

    Java使用注解實(shí)現(xiàn)防止重復(fù)提交實(shí)例

    這篇文章主要介紹了Java使用注解實(shí)現(xiàn)防止重復(fù)提交實(shí)例,在一些項(xiàng)目中由于用戶誤操作,多次點(diǎn)擊表單提交按鈕,會(huì)產(chǎn)生很多次的數(shù)據(jù)交互,為了解決這一問(wèn)題,本文使用注解來(lái)實(shí)現(xiàn)防止重復(fù)提交,需要的朋友可以參考下
    2023-07-07
  • Spring注解驅(qū)動(dòng)之@EventListener注解使用方式

    Spring注解驅(qū)動(dòng)之@EventListener注解使用方式

    這篇文章主要介紹了Spring注解驅(qū)動(dòng)之@EventListener注解使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09

最新評(píng)論

兰州市| 甘南县| 香港 | 兰溪市| 双城市| 休宁县| 壤塘县| 天津市| 定兴县| 丰原市| 洛川县| 永宁县| 贵溪市| 磐石市| 岑溪市| 林甸县| 乌什县| 石狮市| 射洪县| 应用必备| 江源县| 广平县| 长垣县| 凤庆县| 永康市| 甘德县| 伊宁市| 莲花县| 安乡县| 洪雅县| 全州县| 霍山县| 白山市| 绥中县| 元谋县| 东安县| 德安县| 霍林郭勒市| 昭通市| 上高县| 长岛县|