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

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

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

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

首先將它們分個類:

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

1. 關于Ranable和Callable

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

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

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

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

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

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

繼承Thread,兩個步驟:

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

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

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

為了簡單。

以上兩種方式獲取線程執(zhí)行的結(jié)果相當麻煩,不能直接獲取。JDK1.5增加了 Callable, Callable 的 call() 方法可以返回值和拋出異常。Callable 可以返回裝載有計算結(jié)果的 Future 對象。
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();

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

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

->next()

2. 關于Future和FutureTask

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

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

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個方法:

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

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

3)boolean isDone():如果任務已完成,則返回 true。 可能由于正常終止、異?;蛉∠瓿桑谒羞@些情況中,此方法都將返回 true。

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

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

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

判斷任務是否完成;

能夠中斷任務;

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

重點:

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

FutureTask的實現(xiàn):

public class FutureTask<V> implements RunnableFuture<V>

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

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

FutureTask是Future接口的一個唯一實現(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. 關于ExecutorService,Excetor,Excutors,ThreadPoolExcetor

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

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

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

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

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

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

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

ExecutorService 接口 對 Executor 接口進行了擴展,提供了返回 Future 對象,終止,關閉線程池等方法。

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 是一個工具類,類似于 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>());
    }
}

以上是對Java多線程關鍵詞的整理,不至于一團亂麻。

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

相關文章

  • Mybatis?一級緩存和二級緩存原理區(qū)別

    Mybatis?一級緩存和二級緩存原理區(qū)別

    這篇文章主要介紹了Mybatis?一級緩存和二級緩存原理區(qū)別?,文章通過圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • 基于SpringBoot和Vue3的博客平臺文章列表與分頁功能實現(xiàn)

    基于SpringBoot和Vue3的博客平臺文章列表與分頁功能實現(xiàn)

    在前面的教程中,我們已經(jīng)實現(xiàn)了基于Spring Boot和Vue3的發(fā)布、編輯、刪除文章功能。本教程將繼續(xù)引導您實現(xiàn)博客平臺的文章列表與分頁功能,需要的朋友可以參考閱讀
    2023-04-04
  • SpringBoot整合Shiro的環(huán)境搭建教程

    SpringBoot整合Shiro的環(huán)境搭建教程

    這篇文章主要為大家詳細介紹了SpringBoot整合Shiro的環(huán)境搭建教程,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以了解一下
    2022-12-12
  • java面向?qū)ο蟮牧瓌t一法則小結(jié)

    java面向?qū)ο蟮牧瓌t一法則小結(jié)

    本篇文章主要對java面向?qū)ο蟮牧瓌t一法則進行簡要說明,具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • 在Java的MyBatis框架中建立接口進行CRUD操作的方法

    在Java的MyBatis框架中建立接口進行CRUD操作的方法

    這篇文章主要介紹了在Java的MyBatis框架中建立接口進行CRUD操作的方法,CRUD是指在做計算處理時的增加(Create)、重新取得數(shù)據(jù)(Retrieve)、更新(Update)和刪除(Delete)幾個單詞的首字母簡寫,需要的朋友可以參考下
    2016-04-04
  • SpringCloud gateway如何修改返回數(shù)據(jù)

    SpringCloud gateway如何修改返回數(shù)據(jù)

    這篇文章主要介紹了SpringCloud gateway如何修改返回數(shù)據(jù)的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • SpringMVC中轉(zhuǎn)發(fā)與重定向的區(qū)別淺析

    SpringMVC中轉(zhuǎn)發(fā)與重定向的區(qū)別淺析

    這篇文章主要給大家介紹了關于SpringMVC中轉(zhuǎn)發(fā)與重定向的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • Windows10系統(tǒng)下JDK1.8環(huán)境變量的配置

    Windows10系統(tǒng)下JDK1.8環(huán)境變量的配置

    今天帶大家學習在Windows10系統(tǒng)下怎么配置JDK1.8環(huán)境變量,文中有非常詳細的安裝及配置教程,對正在學習的小伙伴們很有幫助,需要的朋友可以參考下
    2021-05-05
  • Java 如何安全的發(fā)布對象

    Java 如何安全的發(fā)布對象

    這篇文章主要介紹了Java 如何安全的發(fā)布對象,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2021-01-01
  • Mybatis?TypeHandler接口及繼承關系示例解析

    Mybatis?TypeHandler接口及繼承關系示例解析

    這篇文章主要為大家介紹了Mybatis?TypeHandler接口及繼承關系示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02

最新評論