1. 程式人生 > >併發-執行緒池-1-Executor框架

併發-執行緒池-1-Executor框架

併發-執行緒池-Executor框架

Executor框架:

為了更好的控制多執行緒,JDk提供了一套執行緒框架Executor,位於java.util.concurrent包下,是JDK併發包的核心。其中重要的一個角色:Executors,扮演執行緒工廠的角色,用於建立執行緒

主要方法包含:

1、該方法返回一個固定數量的執行緒池,方法的執行緒數量不變,有一個任務提交時,若執行緒池中有空閒,則立即執行,若沒有,則會被快取在一個任務佇列中等待有空閒的執行緒去執行。

newFixedThreadPool() 

2、 建立一個執行緒的執行緒池,若空閒則執行,若沒有空閒的執行緒,則暫緩於任務佇列中

newSingleThreadExecutor()

3、方法返回一個可根據實際情況調整執行緒個數的執行緒池,預設初始化時是不建立執行緒的,不限制最大執行緒數量。若有空閒的執行緒則去執行任務,若無任務則不建立執行緒,並且每個空閒的執行緒會在60秒後自動回收。

newCachedThreadPool()

4、該方法返回一個ScheduledExecutorService物件,定時器機制的job去執行,但是執行緒池可以指定執行緒的數量

newScheduledThreadPool()

均是由ThreadPoolExecutor建立而來。

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

演示例子:


import static java.util.concurrent.Executors.newScheduledThreadPool;

import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;

/**
 * @author zhanghuilong
 * @version V1.0
 * @desc
 * @since 2018/01/05
 */
public class
UserExecutors {
private static volatile boolean result = false; static class TaskJob extends Thread{ @Override public void run() { System.out.println("執行緒開始...執行任務"); } } public static void main(String[] args) { // 1 建立一個任務實現執行緒介面 TaskJob taskJob=new TaskJob(); // 2 宣告2具有定時作用的執行緒池 ScheduledExecutorService scheduledExecutorService = newScheduledThreadPool(1); // 3 執行job,啟動延遲10秒後開始執行,每隔5分鐘執行一次任務。。 ScheduledFuture<?> scheduledFuture = scheduledExecutorService .scheduleWithFixedDelay(taskJob, 10, 5, TimeUnit.SECONDS); } }

相關推薦

併發-執行-1-Executor框架

併發-執行緒池-Executor框架 Executor框架: 為了更好的控制多執行緒,JDk提供了一套執行緒框架Executor,位於java.util.concurrent包下,是JDK併發包的核心。其中重要的一個角色:Executors,扮演執行緒

併發07--執行Executor框架

一、JAVA中的執行緒池 執行緒池的實現原理及流程如下圖所示:        如上圖所示,當一個執行緒提交到執行緒池時(execute()或submit()),先判斷核心執行緒數(corePoolSize)是否已滿,如果未滿,則直接建立執行緒執行任務;如果已滿,則判斷佇列(Bl

【轉】執行Executor框架

  一 使用執行緒池的好處 二 Executor 框架 2.1 簡介 2.2 Executor框架結構(主要由三部分構成)  2.3 Executor框架使用說明示意圖 三 ThreadPoolExecutor詳解 3.1 Thread

執行Executor框架

無限制建立執行緒的不足 執行緒生命週期的開銷非常高。執行緒的建立並不是沒有代價的。根據平臺的不同,實際的開銷也有所不同,但是執行緒的建立過程都會需要時間,延遲處理的請求,並且需要JVM和作業系統提供一些輔導操作。如果請求的到達率非常高且請求的處理過程是輕量級的,例如大多數伺服器應

執行Executor框架

# 執行緒池之Executor框架 Java的執行緒既是工作單元,也是執行機制。從JDK5開始,把工作機單元和執行機制分離開來。**工作單元包括Runnable和Callable,而執行機制由Executor框架提供。** ### 1. Executor框架簡介 #### 1.1 Executor框架的

Java併發——執行Executor框架

什麼是執行緒池? 執行緒池的概念大家應該都很清楚,幫我們重複管理執行緒,避免建立大量的執行緒增加開銷。 若採用"為每個任務分配一個執行緒"的方式會存在一些缺陷,尤其是當需要建立大量執行緒時: ①、執行緒生命週期的開銷非常高 ②、資源消耗 ③、穩定性 引入執行緒池

Java併發程式設計的藝術(十)——執行(1)

執行緒池的作用 減少資源的開銷 減少了每次建立執行緒、銷燬執行緒的開銷。 提高響應速度 每次請求到來時,由於執行緒的建立已經完成,故可以直接執行任務,因此提高了響應速度。 提高執行緒的可管理性 執行緒是一種稀缺資源,若不加以限制,不僅會佔用大量資源

Java併發(十)執行&fork/join框架

什麼是執行緒池 第四種獲取執行緒的方法:執行緒池,一個 ExecutorService,它使用可能的幾個池執行緒之一執行每個提交的任務,通常使用 Executors 工廠方法配置。 執行緒池可以解決兩個不同問題:由於減少了每個任務呼叫的開銷,它們通常可以在執

執行1

任務類: package com._ThreadPool; public class MyTask implements Runnable { private int taskId; public MyTask(int id){ this.taskId = id;

深入理解Java執行(1):ThreadPoolExecutor整體流程梳理,建立worker相關方法

執行緒池作為一個執行緒的容器,主要的作用就是防止頻繁建立執行緒,節省時間資源和cpu資源。雖然一定程度上佔用了記憶體,但實際情況下利遠遠大於弊。 構造方法 public ThreadPoolExecutor( int corePoolSize, //核

Java中的執行(1)----執行基礎知識和CachedThreadPool

本文探討一下java中的執行緒池 首先,什麼是執行緒池? 執行緒池通過多個任務重用執行緒,執行緒建立的開銷就被分攤到了多個任務上,而且請求到達時執行緒已經存在,消除了等待執行緒建立帶來的延遲,使得程式

併發 執行

#include <stdio.h> #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> #include <arpa/inet.h> #include

java併發執行瞭解ThreadPoolExecutor就夠了

public Future<?> submit(Runnable task) { if (task == null) throw new NullPointerException(); RunnableFuture<Void> ftask

執行Executor、ExecuteService、Executors 的區別

Executor、ExecuteService都是介面,ExecuteService繼承於Executor,Executor:介面 介面Executor裡面只有一個execute方法: void execute(Runnable command) ExecutorServ

java併發——執行(一)執行機制和如何使用

合理利用執行緒池能夠帶來三個好處。 1、第一:降低資源消耗。通過重複利用已建立的執行緒降低執行緒建立和銷燬造成的消耗。 2、第二:提高響應速度。當任務到達時,任務可以不需要的等到執行緒建立就能立即執行。 3、第三:提高執行緒的可管理性。執

java併發程式設計--Executor框架以及Executors類的建立執行方法

       Eexecutor作為靈活且強大的非同步執行框架,其支援多種不同型別的任務執行策略,提供了一種標準的方法將任務的提交過程和執行過程解耦開發,基於生產者-消費者模式,其提交任務的執行緒相當於生產者,執行任務的執行緒相當於消費者,並用Runnab

併發新特性—Executor 框架執行

蘭亭風雨 · 更新於 2018-11-14 09:00:31 併發新特性—Executor 框架與執行緒池 Executor 框架簡介 在 Java 5 之後,併發程式設計引入了一堆新的啟動、排程和管理執行緒的API。Executor 框架便是 Java 5 中引入的,其內部使用了執行緒池機

Java Executor併發框架(十三)Executor框架執行關於異常的處理

關於為什麼要寫這篇文章,是因為我對Executor執行緒池的兩種提交任務的方式的不同產生的好奇,我們知道,可以通過execute和submit兩種方式往執行緒池提交我們的任務,但是這兩種任務提交的方式到底有什麼區別呢?通過execute方式提交的任務,我們不能獲取任務執行後的返回值,而通過submit提交

Java併發(基礎知識)—— Executor框架執行

在Java併發(基礎知識)—— 建立、執行以及停止一個執行緒中講解了兩種建立執行緒的方式:直接繼承Thread類以及實現Runnable介面並賦給Thread,這兩種建立執行緒的方式線上程比較少的時候是沒有問題的,但是當需要建立大量執行緒時就會出現問題,因為

Java Executor併發框架(四)建立執行的核心引數的解釋

private final BlockingQueue<Runnable> workQueue; // 任務阻塞佇列 private final ReentrantLock mainLock = new ReentrantLock(); // 互斥鎖 privat