1. 程式人生 > >java併發程式設計(十五)之執行緒池

java併發程式設計(十五)之執行緒池

待續...

package com.dason.juc2;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

/*
 * 一、執行緒池:提供了一個執行緒佇列,佇列中儲存著所有等待狀態的執行緒。避免了建立與銷燬額外開銷,提高了響應的速度。
 * 
 * 二、執行緒池的體系結構:
 * 	java.util.concurrent.Executor : 負責執行緒的使用與排程的根介面
 * 		|--**ExecutorService 子介面: 執行緒池的主要介面
 * 			|--ThreadPoolExecutor 執行緒池的實現類
 * 			|--ScheduledExecutorService 子介面:負責執行緒的排程
 * 				|--ScheduledThreadPoolExecutor :繼承 ThreadPoolExecutor, 實現 ScheduledExecutorService
 * 
 * 三、工具類 : Executors 
 * ExecutorService newFixedThreadPool() : 建立固定大小的執行緒池
 * ExecutorService newCachedThreadPool() : 快取執行緒池,執行緒池的數量不固定,可以根據需求自動的更改數量。
 * ExecutorService newSingleThreadExecutor() : 建立單個執行緒池。執行緒池中只有一個執行緒
 * 
 * ScheduledExecutorService newScheduledThreadPool() : 建立固定大小的執行緒,可以延遲或定時的執行任務。
 */
public class TestThreadPool {
	
	public static void main(String[] args) throws Exception {
//		//1. 建立執行緒池
		ExecutorService pool = Executors.newFixedThreadPool(5);
//		ThreadPoolDemo tpd = new ThreadPoolDemo();
//		
//		//2. 為執行緒池中的執行緒分配任務
//		for (int i = 0; i < 10; i++) {
//			pool.submit(tpd);
//		}
//		
//		//3. 關閉執行緒池
//		pool.shutdown();
		
		List<Future<Integer>> list = new ArrayList<>();
		
		for (int i = 0; i < 10; i++) {
			Future<Integer> future = pool.submit(new Callable<Integer>(){

				@Override
				public Integer call() throws Exception {
					int sum = 0;
					
					for (int i = 0; i <= 100; i++) {
						sum += i;
					}
					
					return sum;
				}
				
			});

			list.add(future);
		}
		
		pool.shutdown();
		
		for (Future<Integer> future : list) {
			System.out.println(future.get());
		}
		
	}
	

}

class ThreadPoolDemo implements Runnable{

	private int i = 0;
	
	@Override
	public void run() {
		while(i <= 100){
			System.out.println(Thread.currentThread().getName() + " : " + i++);
		}
	}
	
}
package com.dason.juc2;

import java.util.Random;
import java.util.concurrent.Callable;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

/*
 * 一、執行緒池:提供了一個執行緒佇列,佇列中儲存著所有等待狀態的執行緒。避免了建立與銷燬額外開銷,提高了響應的速度。
 * 
 * 二、執行緒池的體系結構:
 * 	java.util.concurrent.Executor : 負責執行緒的使用與排程的根介面
 * 		|--**ExecutorService 子介面: 執行緒池的主要介面
 * 			|--ThreadPoolExecutor 執行緒池的實現類
 * 			|--ScheduledExecutorService 子介面:負責執行緒的排程
 * 				|--ScheduledThreadPoolExecutor :繼承 ThreadPoolExecutor, 實現 ScheduledExecutorService
 * 
 * 三、工具類 : Executors 
 * ExecutorService newFixedThreadPool() : 建立固定大小的執行緒池
 * ExecutorService newCachedThreadPool() : 快取執行緒池,執行緒池的數量不固定,可以根據需求自動的更改數量。
 * ExecutorService newSingleThreadExecutor() : 建立單個執行緒池。執行緒池中只有一個執行緒
 * 
 * ScheduledExecutorService newScheduledThreadPool() : 建立固定大小的執行緒,可以延遲或定時的執行任務。
 */
public class TestScheduledThreadPool {

	public static void main(String[] args) throws Exception {
		ScheduledExecutorService pool = Executors.newScheduledThreadPool(5);
		
		for (int i = 0; i < 5; i++) {
			Future<Integer> result = pool.schedule(new Callable<Integer>(){

				@Override
				public Integer call() throws Exception {
					int num = new Random().nextInt(100);//生成隨機數
					System.out.println(Thread.currentThread().getName() + " : " + num);
					return num;
				}
				
			}, 1, TimeUnit.SECONDS);
			
			System.out.println(result.get());
		}
		
		pool.shutdown();
	}
	
}

相關推薦

java併發程式設計執行

待續...package com.dason.juc2; import java.util.ArrayList; import java.util.List; import java.util.concurrent.Callable; import java.util.co

慕課網實戰·高併發探索執行 Executor

特別感謝:慕課網jimin老師的《Java併發程式設計與高併發解決方案》課程,以下知識點多數來自老師的課程內容。 jimin老師課程地址:Java併發程式設計與高併發解決方案 new Thread的弊端 每次new Thread 新建物件,效能

Java併發程式設計CountDownLatch和CyclicBarrier

一、CountDownLatch java.util.concurrent.CountDownLatch可以允許一個或多個執行緒等待其他執行緒操作。從countdown字面意義也可以理解,它是類似於一個倒計時鎖,這個倒計時是原子操作,同一時刻只能有一個執行緒操作倒計時。 CountDownL

Java併發程式設計Java中的原子操作類

一、原子操作類簡介 JDK1.5開始提供了java.util.concurrent.atomic包,其中有一系列用法簡單、效能高效、可以執行緒安全更新變數的原子操作類,目前(JDK1.7)大概有這麼些: 二、原子操作類實現原理 以AtomicInteger為例看下原始碼,其中的兩個

java併發程式設計----(JUC集合)總體框架介紹

本節我們將繼續學習JUC包中的集合類,我們知道jdk中本身自帶了一套非執行緒安全的集合類,我們先溫習一下java集合包裡面的集合類,然後系統的看一下JUC包裡面的集合類到底有什麼不同。 java集合類 java集合類裡面主要包含兩大類:一類是Collec

java併發程式設計--可重入內建鎖

    每個Java物件都可以用做一個實現同步的鎖,這些鎖被稱為內建鎖或監視器鎖。執行緒在進入同步程式碼塊之前會自動獲取鎖,並且在退出同步程式碼塊時會自動釋放鎖。獲得內建鎖的唯一途徑就是進入由這個鎖保護的同步程式碼塊或方法。     當某個執行緒請求一個由其他執行緒持有

RxJavaRxJava執行的自由切換

RxJava系列文章目錄導讀: 在Android使用RxJava的時候可能需要頻繁的進行執行緒的切換,如耗時操作放在子執行緒中執行,執行完後在主執行緒渲染介面。如下面示例程式碼: deferObservable(new Callable<Str

Java併發程式設計的藝術》讀書筆記—— 執行

                              執行緒池 1.為什麼要引入執行緒池         昨天和一老鐵聊天時就說到了執行緒,他說執行緒是輕量級的程序,其實也可以這麼說吧。在《Ja

併發程式設計—— Java 執行 實現原理與原始碼深度解析 submit方法

在上一篇《併發程式設計(十一)—— Java 執行緒池 實現原理與原始碼深度解析(一)》中提到了執行緒池ThreadPoolExecutor的原理以及它的execute方法。這篇文章是接著上一篇文章寫的,如果你沒有閱讀上一篇文章,建議你去讀讀。本文解析ThreadPoolExecutor#submit。  

java併發程式設計執行倒計數鎖存器CountDownLatch

一、定義一個同步輔助類,在完成一組正在其他執行緒中執行的操作之前,它允許一個或多個執行緒一直等待。用給定的計數 初始化 CountDownLatch。由於呼叫了 countDown() 方法,所以在當前計數到達零之前,await 方法會一直受阻塞。之後,會釋放所有等待的執行緒

Java併發執行實現原理 Java併發:阻塞佇列BlockingQueue Java併發:阻塞佇列BlockingQueue Java併發程式設計執行的使用

一、總覽 執行緒池類ThreadPoolExecutor的相關類需要先了解:  (圖片來自:https://javadoop.com/post/java-thread-pool#%E6%80%BB%E8%A7%88) Executor:位於最頂層,只有一個 execute(Runnab

Java併發程式設計Condition介面

一、Condition介面簡介 java.util.concurrent.locks.Condition是java併發包中的一個介面,是為配合Lock提供的執行緒等待/通知功能。我們知道Object的監視器方法wait()和notify()配合sychronized關鍵字一樣可以實現等待/通知機

Java框架springMVC檔案上傳、攔截器

一、jackson @RequestBody/ @ResponseBody處理Json資料 作用: @RequestBody註解用於讀取http請求的內容(字串),通過springmvc提供的HttpMessageConverter介面將讀到的內容轉換為json

Java併發程式設計:Executor框架

Java中的執行緒既是工作單元,也是執行單元。工作單元包括Runnable和Callable,而執行單元是由Executor框架支援。 1. Executor框架簡介 1.1 Executor框架的兩級排程模型 在HotSpot VM的執行緒模型中,Java執行緒(java.la

Java併發程式設計Java執行

在開發過程中,合理地使用執行緒池能夠帶來3個好處。 降低資源消耗。通過重複利用已建立的執行緒降低執行緒建立和銷燬造成的消耗。 提高響應速度。當任務到達時,任務可以不需要等到執行緒建立就能立即執行。 提高執行緒的可管理性。執行緒是稀缺資源,如果無限制地建立

併發程式設計—— Java 執行 實現原理與原始碼深度解析

史上最清晰的執行緒池原始碼分析 鼎鼎大名的執行緒池。不需要多說!!!!! 這篇部落格深入分析 Java 中執行緒池的實現。 總覽 下圖是 java 執行緒池幾個相關類的繼承結構:    先簡單說說這個繼承結構,Executor 位於最頂層,也是最簡單的,就一個 execute(

Java學習筆記:import關鍵字

http 技術分享 import logs java學習筆記 .cn 關鍵字 blog ava Java學習筆記(十五):import關鍵字

Java學習筆記:this關鍵字

bsp java image nbsp his this mage 學習筆記 筆記 Java學習筆記(十五):this關鍵字

python學習筆記集合

head erro sdi pytho not in 註意 inter ren mod 集合:對應數學中的集合類型。集合中的元素是唯一,且無序的。 創建集合   方法一:使用{},註意python會自動刪除重復元素 >>> number = {1,2,3

Java學習總結——MySQL數據庫—增,刪,改與部分查詢語句

MySQL數據庫 增 刪 改 查 一.MySQL簡介及在DOS下操作MySQL1.MySQL是一種中型關系型數據庫管理系統(DBMS,Database Management System)。註意:關系型數據庫是按照表的方式存儲數據的2.DOS環境下操作MySQL(1)進入MySQL環境:(