国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

微服務(wù) 第一章 Java線程池技術(shù)應(yīng)用

這篇具有很好參考價值的文章主要介紹了微服務(wù) 第一章 Java線程池技術(shù)應(yīng)用。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

系列文章目錄

第一章 Java線程池技術(shù)應(yīng)用

微服務(wù) 第一章 Java線程池技術(shù)應(yīng)用,面試,Java微服務(wù),微服務(wù),java,python,原力計劃


前言

介紹Java的線程、線程池等操作

1、Java創(chuàng)建線程方式回顧

1.1、繼承Thread類(只運行一次)

public class ThreadTest extends Thread{
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName());
    }

    public static void main(String[] args) {
        new ThreadTest().start();
    }
}

1.1.1、改造成主線程常駐,每秒開啟新線程運行


import java.util.Date;

@Slf4j
public class ThreadTest extends  Thread{

    @Override
    public void run() {
        log.info("線程名稱:{} , 當(dāng)前時間:{}" , Thread.currentThread().getName() , new Date().getTime() );
    }

    public static void main(String[] args) {

        while (true) {
            try {
                new ThreadTest().start();
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            log.info("主線程常駐");
        }
    }

}

1.1.2、匿名內(nèi)部類

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class ThreadTest extends  Thread{

    public static void main(String[] args) {

        Thread thread = new Thread() {
            @Override
            public void run() {
                log.info("Hello {}" , "world");
            }
        };

        thread.start();
    }

}

1.1.3、缺點

繼承了Thread類之后,就不能繼承其他類

1.1.4、擴展知識:Java內(nèi)部類

成員內(nèi)部類(外部類內(nèi)部使用,外部類外部使用)


import lombok.extern.slf4j.Slf4j;

@Slf4j
public class Outer {
    public static void main(String[] args) {
        Inner inner = new Outer().initTest();
        log.info(inner.innerTest());
    }

    public Inner initTest(){
        Inner inner = new Inner();
        return  inner;
    }

    class Inner{
        public Inner(){

        }
        public Inner(String s){

        }

        public String innerTest(){
            return "Inner Hello world";
        }
    }
}

1.1.4.1、靜態(tài)內(nèi)部類
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class Outer {
    public static void main(String[] args) {
        Inner inner = new Inner();
        log.info(inner.innerTest());
    }

    public void initTest(){
        Inner inner = new Inner();
    }

    static class Inner{
        public Inner(){

        }
        public Inner(String s){

        }
        public String innerTest(){
            return "Inner Hello world";
        }
    }
}
1.1.4.2、匿名內(nèi)部類
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class Outer {
    public static void main(String[] args) {
        Outer outer = new Outer();
        outer.sayHello();

    }
    public void sayHello(){
        IMessage iMessage = new IMessage() {
            //匿名類
            @Override
            public String sayHello() {
                return "Hello world";
            }
        };
        log.info(iMessage.sayHello());

    }

    interface IMessage{
        String sayHello();
    }

}

1.2、實現(xiàn)Runnable接口

1.2.1、普通類實現(xiàn)Runnable接口

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class StatSales implements Runnable{
    @Override
    public void run() {
        log.info("統(tǒng)計銷量");
    }

    public static void main(String[] args) {
        Thread thread = new Thread() {
            @Override
            public void run() {
                log.info("Hello world");
            }
        };
        thread.start();
    }
}

1.2.2、匿名方式創(chuàng)建Runnable實現(xiàn)類

public static void main(String[] args) {
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                System.out.println("統(tǒng)計成績");
            }
        };
        new Thread(runnable).start();
    }

1.2.3、使用Lambda方式創(chuàng)建匿名Runnable類

// 使用 Lambda 匿名 Runnable 方式
Thread t3 = new Thread(() -> {
//添加業(yè)務(wù)方法…
});
// 啟動線程
t3.start();

public static void main(String[] args) {
    Thread thread = new Thread(() -> {
        System.out.println("統(tǒng)計平均壽命");
    });

    thread.start();
}

1.2.4、缺點

不能獲得程序的執(zhí)行結(jié)果

1.2.5、擴展Lambda表達式

把函數(shù)作為一個方法的參數(shù)
表達式語法:

(parameters) -> expression

(parameters) ->{ statements; }

說明:

  • 可選類型聲明:不需要聲明參數(shù)類型,編譯器可以統(tǒng)一識別參數(shù)值。
  • 可選的參數(shù)圓括號:一個參數(shù)無需定義圓括號,但多個參數(shù)需要定義圓括號。
  • 可選的大括號:如果主體包含了一個語句,就不需要使用大括號。
  • 可選的返回關(guān)鍵字:如果主體只有一個表達式返回值則編譯器會自動返回值,大括號需要指定表達式返回了一個數(shù)值。
  • 舉例:

    // 1. 不需要參數(shù),返回值為 5  
    () -> 5  
      
    // 2. 接收一個參數(shù)(數(shù)字類型),返回其2倍的值  
    x -> 2 * x  
      
    // 3. 接受2個參數(shù)(數(shù)字),并返回他們的差值  
    (x, y) -> x – y  
      
    // 4. 接收2個int型整數(shù),返回他們的和  
    (int x, int y) -> x + y  
      
    // 5. 接受一個 string 對象,并在控制臺打印,不返回任何值(看起來像是返回void)  
    (String s) -> System.out.print(s)
    

    1.3、實現(xiàn)Callable接口

    FutureTask+Callable

    1.3.1、普通類實現(xiàn)Callable接口

    public class StatScore implements Callable<Double> {
        @Override
        public Double call() throws Exception {
            //統(tǒng)計分?jǐn)?shù)的邏輯
            return 88.98;
        }
    }
    
     public static void main(String[] args) throws ExecutionException, InterruptedException {
            StatScore statScore = new StatScore();
            //跟FutureTask 關(guān)聯(lián)上
            FutureTask<Double> doubleFutureTask = new FutureTask<>(statScore);
            //跟Thread關(guān)聯(lián)上
            Thread thread = new Thread(doubleFutureTask);
            thread.start();
            log.info(String.valueOf(doubleFutureTask.get()));
        }
    

    2、線程池

    線程池就是存放線程的池子,池子里存放了很多可以復(fù)用的線程。
    使用線程池的優(yōu)勢

  • 提高效率,創(chuàng)建好一定數(shù)量的線程放在池中,等需要使用的時候就從池中拿一個,這要比需要的時候創(chuàng)建一個線程對象要快的多。
  • 減少了創(chuàng)建和銷毀線程的次數(shù),每個工作線程都可以被重復(fù)利用,可執(zhí)行多個任務(wù)。
  • 提升系統(tǒng)響應(yīng)速度,假如創(chuàng)建線程用的時間為T1,執(zhí)行任務(wù)用的時間為T2,銷毀線程用的時間為T3,那么使用線程池就免去了T1和T3的時間;
  • 微服務(wù) 第一章 Java線程池技術(shù)應(yīng)用,面試,Java微服務(wù),微服務(wù),java,python,原力計劃

    2.1、五種創(chuàng)建線程的方式

    //創(chuàng)建一個單線程池,它只會用唯一的工作線程來執(zhí)行任務(wù),保證所有任務(wù)按照指定順序(FIFO, LIFO, 優(yōu)先級)執(zhí)行
    ExecutorService executorService = Executors.newSingleThreadExecutor();
    //創(chuàng)建一個定長的線程池,可控制最大并發(fā)數(shù),超出的線程進行隊列等待。 ExecutorService executorService =
    Executors.newFixedThreadPool(2); //可以創(chuàng)建定長的、支持定時任務(wù),周期任務(wù)執(zhí)行。
    ExecutorService executorService = Executors.newScheduledThreadPool(2);
    //創(chuàng)建一個可以緩存的線程池,如果線程池長度超過處理需要,可以靈活回收空閑線程,沒回收的話就新建線程 ExecutorService
    executorService = Executors.newCachedThreadPool(); //創(chuàng)建一個具有搶占式操作的線程池
    ExecutorService executorService = Executors.newWorkStealingPool();

    2.2、new ThreadPoolExecutor()創(chuàng)建線程

    public ThreadPoolExecutor(int corePoolSize,
    int maximumPoolSize,
    long keepAliveTime,
    TimeUnit unit,
    BlockingQueue<Runnable> workQueue,
    ThreadFactory threadFactory,
    RejectedExecutionHandler handler)
    

    參數(shù)說明:

    參數(shù) 含義 解釋
    corePoolSize 該線程池中核心線程數(shù)最大值 核心線程生命周期無限,即使空閑也不會死亡
    maximumPoolSize 線程總數(shù)最大值 任務(wù)隊列滿了以后當(dāng)有新任務(wù)進來則會增加一個線程來處理新任務(wù)(線程總數(shù)<maximumPoolSize )
    keepAliveTime 閑置超時時間 當(dāng)線程數(shù)大于核心線程數(shù)時,超過keepAliveTime時間將會回收非核心線程
    unit keepAliveTime 的單位
    workQueue 線程池中的任務(wù)隊列 *
    threadFactory 為線程池提供創(chuàng)建新線程的線程工廠 *
    RejectedExecutionHandler 飽和策略 拋出異常專用,當(dāng)隊列和最大線程池都滿了之后的飽和策略。

    微服務(wù) 第一章 Java線程池技術(shù)應(yīng)用,面試,Java微服務(wù),微服務(wù),java,python,原力計劃

    2.2.1、拒絕策略

    ThreadPoolExecutor的飽和策略可以通過調(diào)用setRejectedExecutionHandler來修改。JDK提供了幾種不同的RejectedExecutionHandler實現(xiàn),每種實現(xiàn)都包含有不同的飽和策略:AbortPolicy、CallerRunsPolicy、DiscardPolicy和DiscardOldestPolicy。

    拒絕策略如下:

  • CallerRunsPolicy : 調(diào)用線程處理任務(wù)
  • AbortPolicy : 拋出異常
  • DiscardPolicy : 直接丟棄
  • DiscardOldestPolicy : 丟棄隊列中最老的任務(wù),執(zhí)行新任務(wù)
  •         RejectedExecutionHandler rejected = null;
    
            //默認(rèn)策略,阻塞隊列滿,則丟任務(wù)、拋出異常
            rejected = new ThreadPoolExecutor.AbortPolicy();
    
            //阻塞隊列滿,則丟任務(wù),不拋異常
            rejected = new ThreadPoolExecutor.DiscardPolicy();
    
            //刪除隊列中最舊的任務(wù)(最早進入隊列的任務(wù)),嘗試重新提交新的任務(wù)
            rejected = new ThreadPoolExecutor.DiscardOldestPolicy();
    
            //隊列滿,不丟任務(wù),不拋異常,若添加到線程池失敗,那么主線程會自己去執(zhí)行該任務(wù)
            rejected = new ThreadPoolExecutor.CallerRunsPolicy();
            
    

    總結(jié): 就是被拒絕的任務(wù),直接在主線程中運行,不再進入線程池。文章來源地址http://www.zghlxwxcb.cn/news/detail-721371.html

到了這里,關(guān)于微服務(wù) 第一章 Java線程池技術(shù)應(yīng)用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 區(qū)塊鏈技術(shù)與應(yīng)用 【全國職業(yè)院校技能大賽國賽題目解析】第一套智能合約安全漏洞測試(0基礎(chǔ)版)

    區(qū)塊鏈技術(shù)與應(yīng)用 【全國職業(yè)院校技能大賽國賽題目解析】第一套智能合約安全漏洞測試(0基礎(chǔ)版)

    第一套題的智能合約安全漏洞測試題目 漏洞合約代碼 總結(jié): EtherStore合約 是一個簡單的儲蓄合約,用戶可以存入和提取以太幣。 Attack合約 是針對 EtherStore 合約設(shè)計的,它包含了一個構(gòu)造函數(shù)來引用目標(biāo) EtherStore 合約 ,并提供了一個 attack 函數(shù) ,試圖通過先存入再立即提取

    2024年04月11日
    瀏覽(31)
  • 微服務(wù)技術(shù)棧-Docker應(yīng)用部署

    微服務(wù)技術(shù)棧-Docker應(yīng)用部署

    之前文章講到過,docker運行程序的過程就是去倉庫把鏡像拉到本地,然后用一條命令把鏡像運行起來變成容器,接下來我們將介紹如何使用docker去部署Java web開發(fā)的常見服務(wù)。 在之前的文章中我們介紹了容器之間使用沙箱機制,相互隔離。現(xiàn)在我們繼續(xù)來思考幾個Docker容器在

    2024年02月07日
    瀏覽(18)
  • 云計算技術(shù)應(yīng)用實訓(xùn)OpenStack認(rèn)證服務(wù)

    云計算技術(shù)應(yīng)用實訓(xùn)OpenStack認(rèn)證服務(wù)

    #只在controller上執(zhí)行 #1.安裝和配置 #先決條件 #(1)用數(shù)據(jù)庫連接客戶端以 root 用戶連接到數(shù)據(jù)庫服務(wù)器 #(2)創(chuàng)建 keystone 數(shù)據(jù)庫: ? #(3)對``keystone``數(shù)據(jù)庫授予恰當(dāng)?shù)臋?quán)限 #(4)驗證? show databases; #可以看到keystone庫已創(chuàng)建 #(5)退出 #2.安全并配置組件 #(1)安裝包 #(2)編輯文件 /etc/keyst

    2024年02月06日
    瀏覽(27)
  • 第一章 Linux系統(tǒng)服務(wù):Apache安裝及配置應(yīng)用

    第一章 Linux系統(tǒng)服務(wù):Apache安裝及配置應(yīng)用

    1.1http與html 1.2瀏覽器訪問網(wǎng)站的過程 1.3HTTP工作機制 1.4版本 1.5HTTP方法 1.6.http狀態(tài)碼 1.7請求報文 1.8 響應(yīng)報文 1.Apache基礎(chǔ)知識 2.Apache配置文件位置 1.LAMP平臺概述 2.LAMP各組件主要作用 3.構(gòu)建LAMP平臺順序 1. prefork模式(默認(rèn)模式) 2. worker模式 3. event模式 1.1http與html HTTP:為解決

    2024年02月02日
    瀏覽(22)
  • gps北斗授時服務(wù)器(NTP時鐘服務(wù)器)技術(shù)應(yīng)用方案

    gps北斗授時服務(wù)器(NTP時鐘服務(wù)器)技術(shù)應(yīng)用方案

    gps北斗授時服務(wù)器(NTP時鐘服務(wù)器)技術(shù)應(yīng)用方案 gps北斗授時服務(wù)器(NTP時鐘服務(wù)器)技術(shù)應(yīng)用方案 京準(zhǔn)電子科技官微——ahjzsz 隨著計算機和網(wǎng)絡(luò)通信技術(shù)的飛速發(fā)展,火電廠熱工自動化系統(tǒng)數(shù)字化、網(wǎng)絡(luò)化的時代已經(jīng)到來。一方面它為控制和信息系統(tǒng)之間的數(shù)據(jù)交換、分

    2024年02月08日
    瀏覽(36)
  • 服務(wù)器防火墻的應(yīng)用技術(shù)有哪些?

    ? ? ? ?隨著互聯(lián)網(wǎng)的發(fā)展,網(wǎng)絡(luò)安全問題更加嚴(yán)峻。服務(wù)器防火墻技術(shù)作為一種基礎(chǔ)的網(wǎng)絡(luò)安全技術(shù),對于保障我們的網(wǎng)絡(luò)安全至關(guān)重要。本文將介紹服務(wù)器防火墻的概念和作用,以及主要的服務(wù)器防火墻技術(shù),包括數(shù)據(jù)包過濾、狀態(tài)檢測、代理服務(wù)、應(yīng)用層網(wǎng)關(guān)等,幫助

    2024年02月21日
    瀏覽(26)
  • 和數(shù)集團Baas服務(wù)如何推動區(qū)塊鏈技術(shù)應(yīng)用和產(chǎn)業(yè)發(fā)展?

    和數(shù)集團Baas服務(wù)如何推動區(qū)塊鏈技術(shù)應(yīng)用和產(chǎn)業(yè)發(fā)展?

    近日,《區(qū)塊鏈和分布式記賬技術(shù) 參考架構(gòu)》(GB/T 42752-2023)國家標(biāo)準(zhǔn)正式發(fā)布。這是我國首個獲批發(fā)布的區(qū)塊鏈技術(shù)領(lǐng)域國家標(biāo)準(zhǔn)。該標(biāo)準(zhǔn)在區(qū)塊鏈技術(shù)應(yīng)用和產(chǎn)業(yè)發(fā)展方面提出了參考架構(gòu)規(guī)范,包括用戶視圖、功能視圖、實現(xiàn)視圖和部署視圖。在功能架構(gòu)方面,包含用戶層

    2024年02月15日
    瀏覽(27)
  • Java并發(fā)編程詳解:實現(xiàn)高效并發(fā)應(yīng)用的關(guān)鍵技術(shù)

    在當(dāng)前的計算機領(lǐng)域,高效的并發(fā)編程對于Java開發(fā)人員而言變得越發(fā)重要。作為流行的編程語言,Java提供了強大的并發(fā)編程支持,使開發(fā)人員能夠充分發(fā)揮多核處理器和線程的潛力,構(gòu)建高性能、高吞吐量的應(yīng)用程序。本文將深入探討Java并發(fā)編程的關(guān)鍵技術(shù),包括線程安全

    2024年02月13日
    瀏覽(30)
  • 開源軟件安全與應(yīng)對策略探討 - Java 機密計算技術(shù)應(yīng)用實踐

    開源軟件安全與應(yīng)對策略探討 - Java 機密計算技術(shù)應(yīng)用實踐

    據(jù)統(tǒng)計,90% 以上的應(yīng)用都在使用第三方軟件庫,這些軟件大部分都是開源的。與此同時,有超過一半的全球 500 強公司都在使用存在漏洞的開源軟件。這幅漫畫生動的描述了一個大型應(yīng)用軟件的組件架構(gòu),它可能建立在一個極其脆弱的開源組件基礎(chǔ)之上,這個組件可能是二十

    2024年01月22日
    瀏覽(29)
  • 技術(shù)應(yīng)用:Java中eq、ne、ge、gt、le、lt的含義及實際應(yīng)用

    引言 在Java編程中,我們經(jīng)常會遇到需要進行比較操作的場景。為了滿足不同的需求,Java提供了一系列比較運算符,如eq、ne、ge、gt、le、lt等。本文將介紹這些運算符的含義,并結(jié)合使用MyBatis Plus框架的示例代碼,說明它們的實際應(yīng)用。 eq、ne、ge、gt、le、lt的含義 eq :等于

    2024年04月22日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包