1. 程式人生 > >併發程式設計網-執行緒池-說明

併發程式設計網-執行緒池-說明

http://ifeve.com/thread-pools/
24執行緒池

“注意 PoolThread.stop() 方法中呼叫了 this.interrupt()。它確保阻塞在 taskQueue.dequeue() 裡的 wait() 呼叫的執行緒能夠跳出 wait() 呼叫”
的解釋請看以下2:
1。interrupt()的作用是中斷本執行緒的執行。
本執行緒中斷自己是被允許的;其它執行緒呼叫本執行緒的interrupt()方法時,會通過checkAccess()檢查許可權。這有可能丟擲SecurityException異常。
2。如果本執行緒是處於阻塞狀態:呼叫執行緒的wait(), wait(long)或wait(long, int)會讓它進入等待(阻塞)狀態,或者呼叫執行緒的join(), join(long), join(long, int), sleep(long), sleep(long, int)也會讓它進入阻塞狀態。若執行緒在阻塞狀態時,呼叫了它的interrupt()方法,那麼它的“中斷狀態”會被清除並且會收到一個InterruptedException異常。例如,執行緒通過wait()進入阻塞狀態,此時通過interrupt()中斷該執行緒;呼叫interrupt()會立即將執行緒的中斷標記設為“true”,但是由於執行緒處於阻塞狀態,所以該“中斷標記”會立即被清除為“false”,同時,會產生一個InterruptedException的異常。
3。如果執行緒被阻塞在一個Selector選擇器中,那麼通過interrupt()中斷它時;執行緒的中斷標記會被設定為true,並且它會立即從選擇操作中返回。
如果不屬於前面所說的情況,那麼通過interrupt()中斷執行緒時,它的中斷標記會被設定為“true”。
4。中斷一個“已終止的執行緒”不會產生任何操作。

相關推薦

併發程式設計-執行-說明

http://ifeve.com/thread-pools/ 24執行緒池 對 “注意 PoolThread.stop() 方法中呼叫了 this.interrupt()。它確保阻塞在 taskQueue.dequeue() 裡的 wait() 呼叫的執行緒能夠跳出 wai

Python併發程式設計執行/程序

Python併發程式設計之執行緒池/程序池 2017/01/18 · 基礎知識 · 2 評論 · 併發, 執行緒池, 程序池 原文出處: ZiWenXie    引言 Pyt

java併發程式設計一一執行原理分析(三)

合理的設定執行緒池的大小 接著上一篇探討執行緒留下的尾巴。如果合理的設定執行緒池的大小。 要想合理的配置執行緒池的大小、首先得分析任務的特性,可以從以下幾個角度分析: 1、任務的性質:CPU密集型任務、IO密集型任務、混合型任務等; 2、任務的優先順序:高、中、低; 3、任務的執行時

java併發程式設計一一執行原理分析(二)

2、執行緒池 1、什麼是執行緒池 Java中的執行緒池是運用場景最多的併發框架,幾乎所有需要非同步或併發執行任務的程式都可以使用執行緒池。 在開發工程中,合理的使用執行緒池能夠帶來3個好處。 第一:降低資源的消耗,通過重複利用已建立的執行緒降低執行緒建立和銷燬造成的消耗 第二:提

java併發程式設計一一執行原理分析(一)

1、併發包 1、CountDownLatch(計數器) CountDownLatch 類位於 java.util.concurrent 包下,利用它可以實現類似於計數器的功能。 比如有一個任務A,它要等待其他4個任務執行完成之後才能執行,此時就可以利用CountDownLatch

Java併發程式設計執行(三)

一.介紹 Java通過Executors提供四種執行緒池,分別為: (1)newCachedThreadPool:建立一個可快取執行緒池,如果執行緒池長度超過處理需要,可靈活回收空閒執行緒,若無可回收,則新建執行緒。 (2)newFixedThreadPool: 建立一個定長執行緒池,可控制

Java併發(二十一):執行實現原理 Java併發(十八):阻塞佇列BlockingQueue Java併發(十八):阻塞佇列BlockingQueue Java併發程式設計執行的使用

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

Java併發程式設計執行的使用

如果併發的執行緒數量很多,並且每個執行緒都是執行一個時間很短的任務就結束了,這樣頻繁建立執行緒就會大大降低系統的效率,因為頻繁建立執行緒和銷燬執行緒需要時間。   那麼有沒有一種辦法使得執行緒可以複用,就是執行完一個任務,並不被銷燬,而是可以繼續執行其他的任務?   在J

Java併發程式設計執行的使用(轉載)

轉載自:https://www.cnblogs.com/dolphin0520/p/3932921.html Java併發程式設計:執行緒池的使用   在前面的文章中,我們使用執行緒的時候就去建立一個執行緒,這樣實現起來非常簡便,但是就會有一個問題:   如果併發的執行緒數量很多,並且每個執行緒都是執行

JAVA併發程式設計執行 ThreadPoolExecutor

生活 前期追深度,否則會華而不實,後期追廣度,否則會坐井觀天; 前言 在前面,我們已經對Thread有了比較深入的瞭解,並且已經學會了通過new Thread()來建立一個執行緒,並通過start方法來啟動一個執行緒,這種方法非常簡單,同樣也存在弊端: 1、每次通過new Thr

Java高併發程式設計執行

這裡首先介紹了java5中的併發的小工具包:java.util.concurrent.atomic,然後介紹了執行緒池的概念,對使用java5的方式建立不同形式的執行緒進行了演示,之後介紹了兩個 物件:Callable和Future,用於獲取執行緒執行後的結果,

java併發程式設計執行

前言 本文介紹幾種java常用的執行緒池如:FixedThreadPool,ScheduledThreadPool,CachedThreadPool等執行緒池,並分析介紹Executor框架,做到“知其然”:會用執行緒池,正確使用執行緒池。並且“知其所以然”:

Java併發程式設計執行、Callable和Future使用

知識儲備 收藏幾篇好文章: 目錄結構 Callable和Future使用 執行緒池使用 Callable和Future使用 多執行緒實現方式很多,分為兩類:1、沒有返回值的;2、有返回值的。 針對“沒有返回值的”這類可以參

JAVA併發程式設計執行Executors

Java中對執行緒池提供了很好的支援,有了執行緒池,我們就不需要自已再去建立執行緒。如果併發的執行緒數量很多,並且每個執行緒都是執行一個時間很短的任務就結束了,頻繁建立執行緒就會大大降低系統的效率,因為頻繁建立執行緒和銷燬執行緒需要時間。JAVA的執行緒池中的執行緒可以在執

【java併發程式設計執行原理分析及ThreadPoolExecutor原始碼實現

執行緒池簡介:  多執行緒技術主要解決處理器單元內多個執行緒執行的問題,它可以顯著減少處理器單元的閒置時間,增加處理器單元的吞吐能力。         假設一個伺服器完成一項任務所需時間為:T1 建立執行緒時間,T2 線上程中執行任務的時間,T3 銷燬執行緒時間。    

JAVA 併發程式設計-基於執行設計的ScheduledExecutor(八)

    上篇部落格《JAVA 併發程式設計-執行緒池(七)》中曾介紹到newScheduledThreadPool(intcorePoolSize),建立corePoolSize大小的執行緒池。此執行緒池支援定時以及週期性執行任務的需求。    接下來我們一起來分析一下Jav

Java併發程式設計執行的使用

1. 為什麼要使用多執行緒? 隨著科技的進步,現在的電腦及伺服器的處理器數量都比較多,以後可能會越來越多,比如我的工作電腦的處理器有8個,怎麼檢視呢? 計算機右鍵--屬性--裝置管理器,開啟屬性視窗,然後點選“裝置管理器”,在“處理器”下可看到所有的處理器: 也可以通過以下Java程式碼獲取到處理器的

併發程式設計執行ThreadPoolExecutor

前言 在我們平時自己寫執行緒的測試demo時,一般都是用new Thread的方式來建立執行緒。但是,我們知道建立執行緒物件,就會在記憶體中開闢空間,而執行緒中的任務執行完畢之後,就會銷燬。 單個執行緒的話還好,如果執行緒的併發數量上來之後,就會頻繁的建立和銷燬物件。這樣,勢必會消耗大量的系統資源,進而影響執

Java併發程式設計執行ThreadPoolExecutor

  多執行緒的程式的確能發揮多核處理器的效能。雖然與程序相比,執行緒輕量化了很多,但是其建立和關閉同樣需要花費時間。而且執行緒多了以後,也會搶佔記憶體資源。如果不對執行緒加以管理的話,是一個非常大的隱患。而執行緒池的目的就是管理執行緒。當你需要一個執行緒時,你就可以拿一個空閒執行緒去執行任務,當任務執行完後,

python併發程式設計執行剩餘內容(執行佇列,執行)及協程

1. 執行緒的其他方法 import threading import time from threading import Thread,current_thread def f1(n): time.sleep(1) print('子執行緒名稱', current_thread()