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

java 中Executor, ExecutorService 和 Executors 間的不同

 更新時(shí)間:2017年06月07日 15:06:47   作者:馬蘇大馬哈魚(yú)  
這篇文章主要介紹了java 中Executor, ExecutorService 和 Executors 間的不同的相關(guān)資料,需要的朋友可以參考下

java 中Executor, ExecutorService 和 Executors 間的不同

java.util.concurrent.Executor, java.util.concurrent.ExecutorService, java.util.concurrent. Executors 這三者均是 Java Executor 框架的一部分,用來(lái)提供線程池的功能。因?yàn)閯?chuàng)建和管理線程非常心累,并且操作系統(tǒng)通常對(duì)線程數(shù)有限制,所以建議使用線程池來(lái)并發(fā)執(zhí)行任務(wù),而不是每次請(qǐng)求進(jìn)來(lái)時(shí)創(chuàng)建一個(gè)線程。使用線程池不僅可以提高應(yīng)用的響應(yīng)時(shí)間,還可以避免”java.lang.OutOfMemoryError: unable to create new native thread” 之類(lèi)的錯(cuò)誤。

在 Java 1.5 時(shí),開(kāi)發(fā)者需要關(guān)心線程池的創(chuàng)建和管理,但在 Java 1.5 之后 Executor 框架提供了多種內(nèi)置的線程池,例如:FixedThreadPool(包含固定數(shù)目的線程),CachedThreadPool(可根據(jù)需要?jiǎng)?chuàng)建新的線程)等等。

Executor

Executor, ExecutorService, 和 Executors 最主要的區(qū)別是 Executor 是一個(gè)抽象層面的核心接口(大致代碼如下)。

public interface Executor {
 void execute(Runnable command);
}

不同于 java.lang.Thread 類(lèi)將任務(wù)和執(zhí)行耦合在一起, Executor 將任務(wù)本身和執(zhí)行任務(wù)分離,可以閱讀 difference between Thread and Executor 來(lái)了解 Thread 和 Executor 間更多的不同。

ExecutorService

ExecutorService 接口 對(duì) Executor 接口進(jìn)行了擴(kuò)展,提供了返回 Future 對(duì)象,終止,關(guān)閉線程池等方法。當(dāng)調(diào)用 shutDown 方法時(shí),線程池會(huì)停止接受新的任務(wù),但會(huì)完成正在 pending 中的任務(wù)。

Future 對(duì)象提供了異步執(zhí)行,這意味著無(wú)需等待任務(wù)執(zhí)行的完成,只要提交需要執(zhí)行的任務(wù),然后在需要時(shí)檢查 Future 是否已經(jīng)有了結(jié)果,如果任務(wù)已經(jīng)執(zhí)行完成,就可以通過(guò) Future.get() 方法獲得執(zhí)行結(jié)果。需要注意的是,F(xiàn)uture.get() 方法是一個(gè)阻塞式的方法,如果調(diào)用時(shí)任務(wù)還沒(méi)有完成,會(huì)等待直到任務(wù)執(zhí)行結(jié)束。

通過(guò) ExecutorService.submit() 方法返回的 Future 對(duì)象,還可以取消任務(wù)的執(zhí)行。Future 提供了 cancel() 方法用來(lái)取消執(zhí)行 pending 中的任務(wù)。

ExecutorService 部分代碼如下:

public interface ExecutorService extends Executor {
 void shutdown();
 <T> Future<T> submit(Callable<T> task);
 <T> Future<T> submit(Runnable task, T result);
 <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit) throws InterruptedException;
}

Executors

Executors 是一個(gè)工具類(lèi),類(lèi)似于 Collections。提供工廠方法來(lái)創(chuàng)建不同類(lèi)型的線程池,比如 FixedThreadPool 或 CachedThreadPool。

Executors 部分代碼:

public class Executors {
 public static ExecutorService newFixedThreadPool(int nThreads) {
  return new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>());
  }
   
  public static ExecutorService newCachedThreadPool() {
  return new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue<Runnable>());
  }
}

下面詳細(xì)看一下三者的區(qū)別:

Executor vs ExecutorService vs Executors

正如上面所說(shuō),這三者均是 Executor 框架中的一部分。Java 開(kāi)發(fā)者很有必要學(xué)習(xí)和理解他們,以便更高效的使用 Java 提供的不同類(lèi)型的線程池。總結(jié)一下這三者間的區(qū)別,以便大家更好的理解:

·         Executor 和 ExecutorService 這兩個(gè)接口主要的區(qū)別是:ExecutorService 接口繼承了 Executor 接口,是 Executor 的子接口

·         Executor 和 ExecutorService 第二個(gè)區(qū)別是:Executor 接口定義了 execute()方法用來(lái)接收一個(gè)Runnable接口的對(duì)象,而 ExecutorService 接口中的 submit()方法可以接受Runnable和Callable接口的對(duì)象。

·         Executor 和 ExecutorService 接口第三個(gè)區(qū)別是 Executor 中的 execute() 方法不返回任何結(jié)果,而 ExecutorService 中的 submit()方法可以通過(guò)一個(gè) Future 對(duì)象返回運(yùn)算結(jié)果。

·         Executor 和 ExecutorService 接口第四個(gè)區(qū)別是除了允許客戶端提交一個(gè)任務(wù),ExecutorService 還提供用來(lái)控制線程池的方法。比如:調(diào)用 shutDown() 方法終止線程池??梢酝ㄟ^(guò) 《Java Concurrency in Practice》 一書(shū)了解更多關(guān)于關(guān)閉線程池和如何處理 pending 的任務(wù)的知識(shí)。

·         Executors 類(lèi)提供工廠方法用來(lái)創(chuàng)建不同類(lèi)型的線程池。比如: newSingleThreadExecutor() 創(chuàng)建一個(gè)只有一個(gè)線程的線程池,newFixedThreadPool(int numOfThreads)來(lái)創(chuàng)建固定線程數(shù)的線程池,newCachedThreadPool()可以根據(jù)需要?jiǎng)?chuàng)建新的線程,但如果已有線程是空閑的會(huì)重用已有線程。

總結(jié)

下表列出了 Executor 和 ExecutorService 的區(qū)別:

相關(guān)文章

  • Java同步框架AbstractQueuedSynchronizer詳解

    Java同步框架AbstractQueuedSynchronizer詳解

    本篇文章主要介紹了Java同步框架AbstractQueuedSynchronizer詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • @ConfigurationProperties加載外部配置方式

    @ConfigurationProperties加載外部配置方式

    這篇文章主要介紹了@ConfigurationProperties加載外部配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • java中使用xls格式化xml的實(shí)例

    java中使用xls格式化xml的實(shí)例

    這篇文章主要介紹了java中調(diào)用xls格式化xml的實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • Java修飾符 abstract,static,final 的區(qū)別詳解

    Java修飾符 abstract,static,final 的區(qū)別詳解

    以下是對(duì)Java修飾符abstract,static,final的區(qū)別進(jìn)行了詳細(xì)的介紹,需要的朋友可以過(guò)來(lái)參考下
    2013-09-09
  • 如何加密配置文件里的敏感數(shù)據(jù)

    如何加密配置文件里的敏感數(shù)據(jù)

    這篇文章主要介紹了加密配置文件里的敏感數(shù)據(jù)的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • java 中鎖的性能提高辦法

    java 中鎖的性能提高辦法

    這篇文章主要介紹了java 中鎖的性能提高辦法的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • spring中aop的xml配置方法實(shí)例詳解

    spring中aop的xml配置方法實(shí)例詳解

    AOP的配置方式有2種方式:xml配置和AspectJ注解方式。下面這篇文章主要給大家介紹了關(guān)于spring中aop的xml配置方法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-07-07
  • Java 內(nèi)省(Introspector)深入理解

    Java 內(nèi)省(Introspector)深入理解

    這篇文章主要介紹了Java 內(nèi)省(Introspector)深入理解的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • 與近日火爆的ChatGPT聊Elasticsearch源碼

    與近日火爆的ChatGPT聊Elasticsearch源碼

    這篇文章主要為大家分享了與近日火爆的ChatGPT聊Elasticsearch源碼的話題內(nèi)容,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • java接口冪等性的實(shí)現(xiàn)方式

    java接口冪等性的實(shí)現(xiàn)方式

    本文介紹了在不同層面上實(shí)現(xiàn)Java接口冪等性的方法,包括使用冪等表、Nginx+Lua和Redis、以及SpringAOP,通過(guò)這些方法,可以確保接口在多次請(qǐng)求時(shí)只執(zhí)行一次,避免重復(fù)處理和數(shù)據(jù)不一致,每種方法都有其適用場(chǎng)景和優(yōu)勢(shì),通過(guò)實(shí)際測(cè)試驗(yàn)證了冪等性邏輯的有效性
    2025-01-01

最新評(píng)論

潞城市| 永新县| 莱阳市| 桦川县| 博白县| 油尖旺区| 丽江市| 东乡县| 中宁县| 会昌县| 石城县| 鹤峰县| 同心县| 梁山县| 旺苍县| 行唐县| 邢台县| 承德县| 大同市| 读书| 临城县| 呼图壁县| 鄂尔多斯市| 乌恰县| 景洪市| 阳江市| 天峨县| 文昌市| 龙海市| 鄂尔多斯市| 中阳县| 黔西| 从化市| 通江县| 高密市| 全椒县| 福泉市| 陆川县| 房产| 罗江县| 临汾市|