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

Java多線程中的Executor詳解

 更新時(shí)間:2023年12月06日 11:03:43   作者:小柴林  
這篇文章主要介紹了Java多線程中的Executor詳解,該接口提供了一種將任務(wù)提交與如何運(yùn)行每個(gè)任務(wù)的機(jī)制(包括線程使用、調(diào)度等細(xì)節(jié))解耦的方法,它通常使用預(yù)先創(chuàng)建線程而不是創(chuàng)建線程,需要的朋友可以參考下

Java多線程中的Executor

定義了執(zhí)行已提交Runnable任務(wù)的對(duì)象。該接口提供了一種將任務(wù)提交與如何運(yùn)行每個(gè)任務(wù)的機(jī)制(包括線程使用、調(diào)度等細(xì)節(jié))解耦的方法。它通常使用預(yù)先創(chuàng)建線程而不是創(chuàng)建線程。

例如new Thread(new(RunnableTask())).start() 每次都創(chuàng)建新線程來(lái)執(zhí)行任務(wù)。

現(xiàn)在可以使用以下方式來(lái)執(zhí)行任務(wù):

Executor executor = anExecutor;
executor.execute(new RunnableTask1());

然而,Executor接口并不嚴(yán)格要求異步執(zhí)行,在一個(gè)簡(jiǎn)易測(cè)試中,executor 可以在調(diào)用者的線程中立即運(yùn)行提交的任務(wù):

 class DirectExecutor implements Executor {
   public void execute(Runnable r) {
     //直接執(zhí)行提交者任務(wù)
     r.run();
   }
 }

更典型的情況是,任務(wù)在調(diào)用者的線程之外的某個(gè)線程中執(zhí)行。下面的執(zhí)行程序?yàn)槊總€(gè)任務(wù)生成一個(gè)新線程。

 class ThreadPerTaskExecutor implements Executor {
   public void execute(Runnable r) {
     //創(chuàng)建新線程來(lái)執(zhí)行任務(wù)
     new Thread(r).start();
   }
 }

許多Executor實(shí)現(xiàn)對(duì)如何以及何時(shí)調(diào)度任務(wù)施加了某種限制。下面的執(zhí)行程序?qū)⑷蝿?wù)的提交序列化到第二個(gè)執(zhí)行程序,演示了復(fù)合執(zhí)行程序。

class SerialExecutor implements Executor {
   final Queue<Runnable> tasks = new ArrayDeque<Runnable>();
   final Executor executor;
   Runnable active;
 
   SerialExecutor(Executor executor) {
     this.executor = executor;
   }
 
   public synchronized void execute(final Runnable r) {
     //創(chuàng)建一個(gè)任務(wù)并存放到雙端隊(duì)列
     tasks.offer(new Runnable() {
       public void run() {
         try {
           r.run();
         } finally {
           scheduleNext();
         }
       }
     });
     //開(kāi)啟第一個(gè)任務(wù)
     if (active == null) {
       scheduleNext();
     }
   }
 
  
   protected synchronized void scheduleNext() {
     if ((active = tasks.poll()) != null) {
       executor.execute(active);
     }
   }
 }

ExecutorService接口拓展Executor功能,這是一個(gè)更廣泛的接口。

ThreadPoolExecutor類(lèi)提供可擴(kuò)展的線程池實(shí)現(xiàn)。

Executors類(lèi)提供了方便的工廠方法。

內(nèi)存一致性效應(yīng):在將可運(yùn)行對(duì)象提交給執(zhí)行程序之前發(fā)生的線程操作——在它開(kāi)始執(zhí)行之前,可能在另一個(gè)線程中。

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

相關(guān)文章

  • 關(guān)于Java的二叉樹(shù)、紅黑樹(shù)、B+樹(shù)詳解

    關(guān)于Java的二叉樹(shù)、紅黑樹(shù)、B+樹(shù)詳解

    這篇文章主要介紹了關(guān)于Java的二叉樹(shù)、紅黑樹(shù)、B+樹(shù)詳解,能同時(shí)具備數(shù)組查找快的優(yōu)點(diǎn)以及鏈表插入和刪除快的優(yōu)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)就是樹(shù),需要的朋友可以參考下
    2023-05-05
  • Java動(dòng)態(tài)規(guī)劃篇之線性DP的示例詳解

    Java動(dòng)態(tài)規(guī)劃篇之線性DP的示例詳解

    這篇文章主要通過(guò)幾個(gè)例題為大家詳細(xì)介紹一些Java動(dòng)態(tài)規(guī)劃中的線性DP,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java有一定的幫助,需要的可以參考一下
    2022-11-11
  • Servlet和Filter之間的區(qū)別與聯(lián)系

    Servlet和Filter之間的區(qū)別與聯(lián)系

    這篇文章主要介紹了Servlet和Filter之間的區(qū)別與聯(lián)系的相關(guān)資料,需要的朋友可以參考下
    2016-05-05
  • SpringBoot如何使用Scala進(jìn)行開(kāi)發(fā)的實(shí)現(xiàn)

    SpringBoot如何使用Scala進(jìn)行開(kāi)發(fā)的實(shí)現(xiàn)

    這篇文章主要介紹了SpringBoot如何使用Scala進(jìn)行開(kāi)發(fā)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Java 實(shí)現(xiàn)簡(jiǎn)單靜態(tài)資源Web服務(wù)器的示例

    Java 實(shí)現(xiàn)簡(jiǎn)單靜態(tài)資源Web服務(wù)器的示例

    這篇文章主要介紹了Java 實(shí)現(xiàn)簡(jiǎn)單靜態(tài)資源Web服務(wù)器的示例,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-11-11
  • Java中LinkedList的模擬實(shí)現(xiàn)

    Java中LinkedList的模擬實(shí)現(xiàn)

    本文主要介紹了Java中LinkedList的模擬實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • servlet3文件上傳操作

    servlet3文件上傳操作

    這篇文章主要介紹了servlet3文件上傳操作的相關(guān)資料,需要的朋友可以參考下
    2017-11-11
  • 詳解Java停止線程的四種方法

    詳解Java停止線程的四種方法

    如何停止java的線程一直是一個(gè)困惱我們開(kāi)發(fā)多線程程序的一個(gè)問(wèn)題嗎,本文主要介紹了詳解Java停止線程的四種方法,感興趣的可以了解一下
    2021-05-05
  • springboot使用jasypt對(duì)配置文件加密加密數(shù)據(jù)庫(kù)連接的操作代碼

    springboot使用jasypt對(duì)配置文件加密加密數(shù)據(jù)庫(kù)連接的操作代碼

    這篇文章主要介紹了springboot使用jasypt對(duì)配置文件加密加密數(shù)據(jù)庫(kù)連接的操作代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-01-01
  • MybatisPlus 主鍵策略的幾種實(shí)現(xiàn)方法

    MybatisPlus 主鍵策略的幾種實(shí)現(xiàn)方法

    MybatisPlus-Plus支持多種主鍵生成策略,可以通過(guò)@TableId注解的type屬性配置,主要策略包括AUTO、INPUT、ASSING_ID、ASSING_UUID和NONE,每種策略適用于不同的場(chǎng)景,下面就來(lái)介紹一下
    2024-10-10

最新評(píng)論