併發-執行緒池-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