1. 程式人生 > >Java多執行緒--執行緒池介紹

Java多執行緒--執行緒池介紹

為什麼會出現執行緒池?

思考執行緒池問題時,我總是會和資料庫連線池聯想到一起,我個人覺得它們兩者的核心思想有很大的相像之處,它們都是利用了一種"池化"的思想,目的都是為了減少連線的建立和銷燬.

  在多執行緒開發中,會因為執行緒數量多,而且很多時侯,每個執行緒僅僅執行一小段時間就會結束,所以我們需要頻繁的建立執行緒,建立執行緒也是會消耗系統資源的,當需求很大時,有可能導致系統負載過重而直接崩潰掉.所以,我們就想要實現執行緒執行完後不用銷燬,同時該執行緒還可以去執行其他任務,因此就出現了執行緒池。

執行緒池?

什麼是執行緒池呢?通俗易懂的說法--執行緒池實際上就是執行緒的池子,基本思想還是一種物件池的思想,開闢一塊記憶體空間,裡面存放了很多未死亡的執行緒,池中執行緒執行排程由池管理器來處理。當有執行緒任務時,任務提交到執行緒池後,就會從執行緒池中直接尋找空閒的執行緒為之服務,執行完成後將執行緒物件歸池,這樣可以避免反覆建立執行緒物件所帶來的效能開銷,節省了系統的資源。

線上程池的程式設計模式下,任務是提交給整個執行緒池,而不是直接交給某個執行緒,執行緒池在拿到任務後,它就會線上程池內部查詢有無空閒的執行緒,然後再把任務交給執行緒池內部的某個空閒的執行緒,如果沒有空閒的程序,任務就處於等待狀態

   使用了執行緒池後減少了建立和銷燬執行緒的次數,每個執行緒都可以被重複利用,可執行多個任務,同時我們可以根據系統的承受能力,調整執行緒池中執行緒的數目,可以很大程度的提高資源利用率.

執行緒池的好處?

1.避免執行緒的建立和銷燬帶來的效能開銷。
         2.避免大量的執行緒間因互相搶佔系統資源導致的阻塞現象。

         3.能夠對執行緒進行簡單的管理並提供定時執行、間隔執行等功能。


相關推薦

java型的理解(執行型)

說道多型,一定離不開其它兩大特性:封裝和繼承。而多型是在它們的基礎之上表現而來的,息息相關。在記憶中,每一次學習面向物件的時候,都與這三大特性有扯不開的關係,其是面向物件的重點,當然也算是難點。但是,它們就像是一層窗戶紙,只要有一個縫隙,你就完全可以搞懂什麼是面向物件。下面來

Java線程系列--“JUC線程”03之 線程原理(二)

.cn 創建 計數 dex unbound max strong 一點 rem 線程池示例 在分析線程池之前,先看一個簡單的線程池示例。 import java.util.concurrent.Executors; import java.util.concurrent.

Java線程系列--“JUC線程”04之 線程原理(三)

以及 java div 鉤子 重載 ati 系列 lex 基礎 轉自:http://www.cnblogs.com/skywang12345/p/3509960.html 本章介紹線程池的生命周期。在"Java多線程系列--“基礎篇”01之 基本概念"中,我們介紹過,線程有

Java線程系列--“JUC線程”06之 Callable和Future

done ecan 對象 ava running 轉載 end 基於 處理 轉自:http://www.cnblogs.com/skywang12345/p/3544116.html 概要 本章介紹線程池中的Callable和Future。 Callable 和 Futu

Java線程系列--“JUC線程”01之 線程架構

功能 err 一個表 @override 轉換 任務 新的 play ima 轉自:http://www.cnblogs.com/skywang12345/p/3509903.html 概要 前面分別介紹了"Java多線程基礎"、"JUC原子類"和"JUC鎖"。本章介紹JU

Java執行執行介紹

為什麼會出現執行緒池?思考執行緒池問題時,我總是會和資料庫連線池聯想到一起,我個人覺得它們兩者的核心思想有很大的相像之處,它們都是利用了一種"池化"的思想,目的都是為了減少連線的建立和銷燬.  在多執行

libevent原始碼分析鎖和執行

寫在前面: ​ 這個原始碼是分析libevent-2.0.20-stable, 並非最新版本的libevent,作者並沒有全看原始碼,在這裡會推薦以下參考的一些網站,也歡迎大家在不足的地方提出來進行討論。 鎖 ​ libevent的內部實現不需要多執行緒,

執行的那些事兒(2) 程序與執行的區別與聯絡

  在進行多執行緒程式設計之前我們先解決一個基本問題:什麼是執行緒、什麼是程序,他們之間有什麼區別與聯絡。 (1)程序:執行環境                   執行緒:執行單位         用書面一點的知說,程序是一個計算機中程式執行的一個實體,執行緒是作業系

執行的那點事兒(1)如何選擇執行

  多執行緒向來是一個讓程式設計師頭痛的一個問題,不只是初學者容易犯錯誤,很多老鳥也難免站著中槍。一旦出現問題很難定位和解決,除了可能因為程式設計者知識上的缺陷導致的疏漏外,另一個難題就是問題重現難度大,避免多執行緒導致BUG最好的方法就是預防。   首先,在開始進行多執行

Java高階Java執行執行棧資訊的獲取

*/public LocationInfo(Throwable t, String fqnOfCallingClass) {String s;…t.printStackTrace(pw);s = sw.toString();sw.getBuffer().setLength(0);…. // 這裡的程式碼省略}

iOS開發執行開發之執行安全篇

前言:一塊資源可能會被多個執行緒共享,也就是多個執行緒可能會訪問同一塊資源,比如多個執行緒訪問同一個物件、同一個變數、同一個檔案和同一個方法等。因此當多個執行緒訪問同一塊資源時,很容易會發生資料錯誤及資料不安全等問題。因此要避免這些問題,我們需要使用“執行緒鎖”來實現。 一、使用關鍵字 優

執行簡單執行通訊例項

1、多執行緒通訊 兩個執行緒同時操作一個儲存空間,一個存資料,一讀資料。並且按照一定的順序輪流執行。Object提供wait(),notify(),notify All(),方法用於解決執行緒間通訊問題。 1.1、程式碼 package com.e

執行NSThread

每個iOS應用程式都有個專門用來更新顯示UI介面、處理使用者的觸控事件的主執行緒,因此不能將其他太耗時的操作放在主執行緒中執行,不然會造成主執行緒堵塞(出現卡機現象),帶來極壞的使用者體驗。一般的解決方案就是將那些耗時的操作放到另外一個執行緒中去執行,多執行緒程式設計是

TCP併發伺服器例項執行

1.客戶端 #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <sys/un.h> #include <netdb.

Java執行實現電影院售票案例

某電影院目前正在上映賀歲大片,共有100張票,而它有3個售票視窗,請設計一個程式模擬該電影院售票。 定義Sell類實現Runnable介面,很好的解決了單繼承共享資源問題 public class Sell implements Runnable { // 定義100張票,三個售票

java執行物件鎖、類鎖、同步機制詳解

1.在java多執行緒程式設計中物件鎖、類鎖、同步機制synchronized詳解:     物件鎖:在java中每個物件都有一個唯一的鎖,物件鎖用於物件例項方法或者一個物件例項上面的。     類鎖:是用於一個類靜態方法或者class物件的,一個

Java 執行實現死鎖場景

簡述: 《Java 程式設計思想》  P718 ~ P722 模擬死鎖的場景, 三個人 三根筷子,每個人需要拿到身邊的兩根筷子才能開始吃飯 出現死鎖的場景是,三個人都拿到了右邊的筷子,但是由於筷子都被搶佔,均無法獲得左邊的筷子 Chopstick.java

Java 執行 join和interrupt 方法

簡述: 使用Java多執行緒中join和interrupt函式 《Java程式設計思想》 P669 ~ P670 一個執行緒可以再其他執行緒上呼叫join()方法,其效果是等待一段時間直到第二個執行緒結束才繼續執行。 如果某個執行緒在另一個執行緒t上呼叫t.join(), 此

Java 執行 CountDownLatch 試用

簡述: 使用Java多執行緒的庫,包括 ExecutorService執行緒池, CountDownLatch執行緒執行控制(知道所有啟動的執行緒呼叫完成後,函式才會繼續執行) package test.anialy.multithread; import java.ut

Java執行中Synchronized簡介和Static Synchronized的區別

在進行Java開發時,多執行緒的開發是經常會使用的。首先會問一個小問題啊,在Java中有幾種方法可以建立一個執行緒? 我給的答案是3種。(如果還有其他的請留言告訴我哈。) 1、建立直接繼承自Thread類建立執行緒子類。   步驟如下:a 定義一個子類,同時