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

Java中實(shí)現(xiàn)多線程關(guān)鍵詞整理(總結(jié))

 更新時(shí)間:2017年05月12日 09:29:30   作者:aheizi  
這篇文章主要介紹了Java中實(shí)現(xiàn)多線程關(guān)鍵詞整理,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下

Java中的Runable,Callable,Future,FutureTask,ExecutorService,Excetor,Excutors,ThreadPoolExcetor在這里對(duì)這些關(guān)鍵詞,以及它們的用法做一個(gè)總結(jié)。

首先將它們分個(gè)類:

Runable,Callable
Future,FutureTask
ExecutorService,Excetor,Excutors,ThreadPoolExcetor

1. 關(guān)于Ranable和Callable

首先Java中創(chuàng)建線程的方法有三種:

  1. 繼承Thread類,覆蓋run方法
  2. 實(shí)現(xiàn)Runable接口,實(shí)現(xiàn)run方法
  3. 實(shí)現(xiàn)Callable接口,實(shí)現(xiàn)run方法

三種實(shí)現(xiàn)的優(yōu)缺點(diǎn):

繼承Thread,單繼承的緣故,不能再繼承其他類,獲取當(dāng)前線程this

實(shí)現(xiàn)Runable接口,沒有返回值,獲取當(dāng)前線程Thread.currentThread()

實(shí)現(xiàn)Callable接口,可通過Future.get()獲取返回值,獲取當(dāng)前線程 Thread.currentThread()

繼承Thread,兩個(gè)步驟:

class DemoThread extends Thread {
  @Override
  public void run() {
    super.run();
    // Perform time-consuming operation...
  }
}
DemoThread t = new DemoThread();
t.start();
  • 繼承Thread類,覆蓋run()方法。
  • 創(chuàng)建線程對(duì)象并用start()方法啟動(dòng)線程。

實(shí)現(xiàn)Runable,一般使用如下:

new Thread(new Runnable() {
  @Override
  public void run() {
    // do something
  }
}).start();

為了簡單。

以上兩種方式獲取線程執(zhí)行的結(jié)果相當(dāng)麻煩,不能直接獲取。JDK1.5增加了 Callable, Callable 的 call() 方法可以返回值和拋出異常。Callable 可以返回裝載有計(jì)算結(jié)果的 Future 對(duì)象。
Callable的源碼:

public interface Callable<V> {
  V call() throws Exception;
}

Callable的基本使用方法:

FutureTask<Integer> futureTask = new FutureTask<Integer>(new Callable<Integer>() {
  @Override
  public Integer call() throws Exception {
    // do something
    return null;
  }
});
Thread thread = new Thread(futureTask);
thread.start();
Integer result = futureTask.get();

運(yùn)行 Callable 任務(wù)可以拿到一個(gè) Future 對(duì)象,通過Future的get()方法拿到線程執(zhí)行的返回值。那么...Future,

FutureTask區(qū)別是什么,怎么使用?

->next()

2. 關(guān)于Future和FutureTask

為了獲取線程的執(zhí)行結(jié)果,引入了Future的FutureTask,那么他們是什么關(guān)系,如何使用?

Future類位于java.util.concurrent包下,它是一個(gè)接口:

public interface Future<V> {
  boolean cancel(boolean mayInterruptIfRunning);
  boolean isCancelled();
  boolean isDone();
  V get() throws InterruptedException, ExecutionException;
  V get(long timeout, TimeUnit unit)
    throws InterruptedException, ExecutionException, TimeoutException;
}

Future 定義了5個(gè)方法:

1)boolean cancel(boolean mayInterruptIfRunning):試圖取消對(duì)此任務(wù)的執(zhí)行。如果任務(wù)已完成、或已取消,或者由于某些其他原因而無法取消,則此嘗試將失敗。當(dāng)調(diào)用 cancel() 時(shí),如果調(diào)用成功,而此任務(wù)尚未啟動(dòng),則此任務(wù)將永不運(yùn)行。如果任務(wù)已經(jīng)啟動(dòng),則 mayInterruptIfRunning 參數(shù)確定是否應(yīng)該以試圖停止任務(wù)的方式來中斷執(zhí)行此任務(wù)的線程。此方法返回后,對(duì) isDone() 的后續(xù)調(diào)用將始終返回 true。如果此方法返回 true,則對(duì) isCancelled() 的后續(xù)調(diào)用將始終返回 true。

2)boolean isCancelled():如果在任務(wù)正常完成前將其取消,則返回 true。

3)boolean isDone():如果任務(wù)已完成,則返回 true。 可能由于正常終止、異常或取消而完成,在所有這些情況中,此方法都將返回 true。

4)V get()throws InterruptedException,ExecutionException:如有必要,等待計(jì)算完成,然后獲取其結(jié)果。

5)V get(long timeout,TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException: 如有必要,最多等待為使計(jì)算完成所給定的時(shí)間之后,獲取其結(jié)果(如果結(jié)果可用)。

總的來說Future提供了三種功能:

判斷任務(wù)是否完成;

能夠中斷任務(wù);

能夠獲取任務(wù)執(zhí)行結(jié)果。

重點(diǎn):

RunnableFuture繼承了Runnable接口和Future接口,而FutureTask實(shí)現(xiàn)了RunnableFuture接口。

FutureTask的實(shí)現(xiàn):

public class FutureTask<V> implements RunnableFuture<V>

RunnableFuture接口的實(shí)現(xiàn):

public interface RunnableFuture<V> extends Runnable, Future<V> {
  void run();
}

FutureTask是Future接口的一個(gè)唯一實(shí)現(xiàn)類。

除了可以用Thread包裝FutureTask外,還有另一種使用方法:

ExecutorService executor = Executors.newCachedThreadPool();
FutureTask<Integer> futureTask = new FutureTask<Integer>(new Callable<Integer>() {
  @Override
  public Integer call() throws Exception {
    // do something
    return null;
  }
});
executor.submit(futureTask);
Integer result = futureTask.get();

這里用到了Executor 框架。

->next();

3. 關(guān)于ExecutorService,Excetor,Excutors,ThreadPoolExcetor

Executor框架在Java 5中被引入,Executor 框架是一個(gè)根據(jù)一組執(zhí)行策略調(diào)用、調(diào)度、執(zhí)行和控制的異步任務(wù)的框架。
在說Executor 框架之前我們需要引入一個(gè)新的概念——線程池(ThreadPoolExecutor):

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

ThreadPoolExecutor是Executors類的底層實(shí)現(xiàn)。

在JDK幫助文檔中,有如此一段話:

“強(qiáng)烈建議程序員使用較為方便的 Executors 工廠方法 Executors.newCachedThreadPool()(無界線程池,可以進(jìn)行自動(dòng)線程回收)、Executors.newFixedThreadPool(int)(固定大小線程池)和 Executors.newSingleThreadExecutor()(單個(gè)后臺(tái)線程),它們均為大多數(shù)使用場景預(yù)定義了設(shè)置?!?/p>

那么ExecutorService,Excetor,Excutors都是什么?
Excetor是一個(gè)抽象層面的核心接口:

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

ExecutorService 接口 對(duì) Executor 接口進(jìn)行了擴(kuò)展,提供了返回 Future 對(duì)象,終止,關(guān)閉線程池等方法。

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 是一個(gè)工具類,類似于 Collections。提供工廠方法來創(chuàng)建不同類型的線程池,比如 FixedThreadPool 或 CachedThreadPool。

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>());
    }
}

以上是對(duì)Java多線程關(guān)鍵詞的整理,不至于一團(tuán)亂麻。

以上所述是小編給大家介紹的Java中實(shí)現(xiàn)多線程關(guān)鍵詞整理,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • java中int轉(zhuǎn)string與string轉(zhuǎn)int的效率對(duì)比

    java中int轉(zhuǎn)string與string轉(zhuǎn)int的效率對(duì)比

    這篇文章主要介紹了java中int轉(zhuǎn)string與string轉(zhuǎn)int的效率對(duì)比,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java如何實(shí)現(xiàn)CIDR轉(zhuǎn)IP段

    Java如何實(shí)現(xiàn)CIDR轉(zhuǎn)IP段

    CIDR是一種用于高效分配和管理?IP?地址的網(wǎng)絡(luò)編址方法,這篇文章主要為大家詳細(xì)介紹了如何使用Java實(shí)現(xiàn)CIDR轉(zhuǎn)IP段,感興趣的小伙伴可以參考一下
    2025-03-03
  • java控制臺(tái)輸出圖書館管理系統(tǒng)

    java控制臺(tái)輸出圖書館管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了java控制臺(tái)輸出圖書館管理系統(tǒng),只用java代碼不用數(shù)據(jù)庫和GUI等,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • Springboot-yaml配置和自動(dòng)配置原理分析

    Springboot-yaml配置和自動(dòng)配置原理分析

    這篇文章主要介紹了Springboot-yaml配置和自動(dòng)配置原理分析,自動(dòng)配置原理是配置文件配置debug: true可以在控制臺(tái)打印自動(dòng)配置報(bào)告.可以打印所有的啟動(dòng)的自動(dòng)配置和沒有啟動(dòng)的自動(dòng)配置類,需要的朋友可以參考下
    2021-06-06
  • Struts2框架初學(xué)接觸

    Struts2框架初學(xué)接觸

    本文主要給大家從初學(xué)者的角度介紹了Struts2框架結(jié)構(gòu)和基本頁面代碼等內(nèi)容,一起來學(xué)習(xí)一下。
    2017-11-11
  • Java實(shí)現(xiàn)FIFO、LRU、LFU、OPT頁面置換算法

    Java實(shí)現(xiàn)FIFO、LRU、LFU、OPT頁面置換算法

    本文主要介紹了Java實(shí)現(xiàn)FIFO、LRU、LFU、OPT頁面置換算法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Java中單例模式的七種寫法示例

    Java中單例模式的七種寫法示例

    作為一個(gè)Java開發(fā)者,也許你覺得自己對(duì)單例模式的了解已經(jīng)足夠多了,但究竟你自己了解的程度到底怎樣呢?下面這篇文章主要給大家介紹了關(guān)于Java中單例模式的七種寫法,需要的朋友可以參考下
    2021-09-09
  • 詳解SpringBoot修改啟動(dòng)端口server.port的四種方式

    詳解SpringBoot修改啟動(dòng)端口server.port的四種方式

    這篇文章主要介紹了詳解SpringBoot修改啟動(dòng)端口server.port的四種方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Hutool?Java工具類庫_ExcelUtil的使用

    Hutool?Java工具類庫_ExcelUtil的使用

    這篇文章主要介紹了Hutool?Java工具類庫_ExcelUtil的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Spring?Boot的無縫銜接實(shí)踐案例

    Spring?Boot的無縫銜接實(shí)踐案例

    在快速迭代的軟件開發(fā)環(huán)境中,無縫銜接是提升開發(fā)效率、降低維護(hù)成本、增強(qiáng)系統(tǒng)穩(wěn)定性的關(guān)鍵,本文將深入解析Spring?Boot無縫銜接的幾大優(yōu)勢,并通過實(shí)際案例和深入分析,展示這些優(yōu)勢如何在項(xiàng)目中發(fā)揮作用
    2024-08-08

最新評(píng)論

丹江口市| 新乡市| 孝义市| 盖州市| 宜昌市| 龙口市| 民权县| 巨鹿县| 泽州县| 土默特右旗| 平罗县| 鹿邑县| 临潭县| 襄垣县| 泗阳县| 泽州县| 大厂| 三穗县| 开原市| 涞源县| 安西县| 托克托县| 安泽县| 华池县| 湘潭市| 昆明市| 申扎县| 河曲县| 山丹县| 武功县| 通山县| 社旗县| 高要市| 英山县| 金乡县| 罗田县| 微博| 定结县| 剑阁县| 西林县| 吉安市|