国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java Executor 框架的實例詳解

Java Executor 框架的實例詳解

2020-12-30 11:09攻城獅--晴明 Java教程

這篇文章主要介紹了Java Executor 框架的實例詳解的相關資料,這里提供實例來幫助大家學習理解這部分內(nèi)容,需要的朋友可以參考下

Java Executor 框架的實例詳解

大多數(shù)并發(fā)都是通過任務執(zhí)行的方式來實現(xiàn)的。

一般有兩種方式執(zhí)行任務:串行和并行。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class SingleThreadWebServer {
 public static void main(String[] args) throws Exception {
  ServerSocket socket = new ServerSocket(80);
  while(true) {
   Socket conn = socket.accept();
   handleRequest(conn);
  }
 }
}
class ThreadPerTaskWebServer {
 public static void main(String[] args) throws Exception {
  ServerSocket socket = new ServerSocket(80);
  while(true) {
   final Socket conn = socket.accept();
   Runnable task = new Runnable() {
    public void run() {
     handleRequest(conn);
    }
   };
   new Thread(task).start();
  }
 }
}

當然上面的這兩種方式都是有問題的。單線程的問題就是并發(fā)量會是瓶頸,多線程版本就是無限制的創(chuàng)建線程會導致資源不足問題。

Executor 框架

任務是一組邏輯工作單元,而線程是使任務異步執(zhí)行的機制。

JDK 提供了 Executor 接口:

?
1
2
3
public interface Executor {
  void execute(Runnable command);
}

雖然 Executor 接口比較簡單,但是卻是異步任務執(zhí)行框架的基礎,該框架能支持多種不同類型的任務執(zhí)行策略。它提供了一種標準的方式把任務的提交過程與執(zhí)行過程進行了解耦。用 Runnable 來代表任務。Executor 的實現(xiàn)提供了對生命周期的支持以及統(tǒng)計信息應用程序管理等機制。

Executor 是基于生產(chǎn)者消費者模式的,提交任務的操作相當于生產(chǎn)者,執(zhí)行任務的線程相當于消費。

基于 Executor 的 WebServer 例子如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class TaskExecutorWebServer {
 private static final int NTHREADS = 100;
 private static final Executor exec = Executors.newFixedThreadPool(NTHREADS);
 public static void main(String[] args) throws Exception {
  ServerSocket serverSocket = new ServerSocket(80);
  while (true) {
   final Socket conn = serverSocket.accept();
   Runnable task = new Runnable() {
    @Override
    public void run() {
     handleRequest(conn);
    }
   };
   exec.execute(task);
  }
 }
}

另外可以自己實現(xiàn) Executor 來控制是并發(fā)還是并行的,如下面代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/**
 * 執(zhí)行已提交的 Runnable 任務的對象。
 * 此接口提供一種將任務提交與每個任務將如何運行的機制(包括線程使用的細節(jié)、調(diào)度等)分離開來的方法。
 * 通常使用 Executor 而不是顯式地創(chuàng)建線程。
 *
 *
 * @author renchunxiao
 *
 */
public class ExecutorDemo {
 public static void main(String[] args) {
  Executor executor = new ThreadExecutor();
  executor.execute(new Runnable() {
   @Override
   public void run() {
    // do something
   }
  });
  Executor executor2 = new SerialExecutor();
  executor2.execute(new Runnable() {
   @Override
   public void run() {
    // do something
   }
  });
 }
}
/**
 * 創(chuàng)建一個線程來執(zhí)行 command
 *
 * @author renchunxiao
 *
 */
class ThreadExecutor implements Executor {
 @Override
 public void execute(Runnable command) {
  new Thread(command).start();
 }
}
/**
 * 串行執(zhí)行 command
 *
 * @author renchunxiao
 *
 */
class SerialExecutor implements Executor {
 @Override
 public void execute(Runnable command) {
  command.run();
 }
}

線程池

線程池就是線程的資源池,可以通過 Executors 中的靜態(tài)工廠方法來創(chuàng)建線程池。

  • newFixedThreadPool。創(chuàng)建固定長度的線程池,每次提交任務創(chuàng)建一個線程,直到達到線程池的最大數(shù)量,線程池的大小不再變化。
  • newSingleThreadExecutor。單個線程池。
  • newCachedThreadPool。根據(jù)任務規(guī)模變動的線程池。
  • newScheduledThreadPool。創(chuàng)建固定長度的線程池,以延遲或定時的方式來執(zhí)行任務。

JVM 只有在所有非守護線程全部終止后才會退出,所以,如果無法正確的關閉 Executor,那么 JVM 就無法結束。

為了解決執(zhí)行服務的生命周期問題,有個擴展 Executor 接口的新接口 ExecutorService。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public interface ExecutorService extends Executor {
 void shutdown();
 List<Runnable> shutdownNow();
 boolean isShutdown();
 boolean isTerminated();
 boolean awaitTermination(long timeout, TimeUnit unit)
  throws InterruptedException;
 <T> Future<T> submit(Callable<T> task);
 <T> Future<T> submit(Runnable task, T result);
 Future<?> submit(Runnable task);
 <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks)
  throws InterruptedException;
 <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks,
         long timeout, TimeUnit unit)
  throws InterruptedException;
 <T> T invokeAny(Collection<? extends Callable<T>> tasks)
  throws InterruptedException, ExecutionException;
 <T> T invokeAny(Collection<? extends Callable<T>> tasks,
     long timeout, TimeUnit unit)
  throws InterruptedException, ExecutionException, TimeoutException;
}

ExecutorService 生命周期有三種狀態(tài):運行、關閉、已終止。ExecutorService 在初始創(chuàng)建時處于運行狀態(tài)。shutdown 方法會平緩關閉:不在接受新的任務,并且等待已經(jīng)執(zhí)行的任務執(zhí)行完成(包括那些還未開始的任務)。shutdownNow 方法將粗暴關閉:它將嘗試取消所有運行中的任務,并且不再啟動隊列中尚未開始的任務。所有任務都執(zhí)行完成后進入到已終止狀態(tài)。

Callable 和 Future

Executor 框架使用 Runnable 作為基本的任務表示形式。Runnable 是一種有局限性的抽象,它的 run 方法不能返回值和拋出一個受檢查異常。

許多任務實際上是存在延時的計算,例如數(shù)據(jù)庫查詢,從網(wǎng)絡獲取資源。對于這些任務,Callable 是更好的抽象,它認為 call 將返回一個值,并且可能拋出異常。

Executor 執(zhí)行的任務有四個生命周期階段:創(chuàng)建、提交、開始和完成。由于有些任務需要很長時間有可能希望取消,在 Executor 框架當中,已提交未開始的任務可以取消。

Future 表示一個任務的生命周期,并且提供了相應的方法來判斷是否已經(jīng)完成或取消,以及獲取任務的結果和取消任務等。

如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

原文鏈接:http://blog.csdn.net/qq_37267015/article/details/77246331

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 永久免费看黄网站 | 黄色网页在线观看 | 狠狠中文字幕 | 精品亚洲一区二区 | 国产精品日韩在线观看 | 91免费视频观看 | 我不卡一区 | 中文字幕视频在线观看 | 亚洲国产成人精品久久久国产成人一区 | 久久久久久久久国产 | 国产目拍亚洲精品99久久精品 | 久久伊人中文字幕 | 久在线视频 | 夜夜操天天干 | 精品视频久久久 | www.伊人 | 91久久精品国产91久久 | av大片| 亚洲午夜精品片久久www慈禧 | 午夜影院免费 | www中文字幕 | 五月激情综合网 | 蜜桃av一区二区三区 | 懂色一区二区三区av片 | 午夜你懂得| 亚洲国产精品一区在线 | 久久网站热最新地址 | 亚洲欧美在线观看 | 亚洲免费看av | 黑人中文字幕一区二区三区 | 成人日韩在线观看 | 精品久久久久久久久久久久久久 | 中文字幕在线视频一区 | 一本色道久久综合狠狠躁篇的优点 | 免费在线污视频 | 色日韩| 曰韩一级鸥美一级 | 中文在线观看视频 | 欧美日韩电影一区二区 | 成人欧美一区二区三区色青冈 | 亚洲午夜精品一区二区三区 |