1. 程式人生 > >Java 多執行緒基礎(一)基本概念

Java 多執行緒基礎(一)基本概念

Java 多執行緒基礎(一)基本概念

一、併發與並行

1、併發:指兩個或多個事件在同一個時間段內發生。

2、並行:指兩個或多個事件在同一時刻發生(同時發生)。

在作業系統中,安裝了多個程式,併發指的是在一段時間內巨集觀上有多個程式同時執行,這在單 CPU 系統中,每一時刻只能有一道程式執行,即微觀上這些程式是分時的交替執行,只不過是給人的感覺是同時執行,那是因為分時交替執行的時間是非常短的。

而在多個 CPU 系統中,則這些可以併發執行的程式便可以分配到多個處理器上(CPU),實現多工並行執行,即利用每個處理器來處理一個可以併發執行的程式,這樣多個程式便可以同時執行。目前電腦市場上說的多核 CPU,便是多核處理器,核 越多,並行處理的程式越多,能大大的提高電腦執行的效率。

3、注意點

單核處理器的計算機肯定是不能並行的處理多個任務的,只能是多個任務在單個CPU上併發執行。同理,執行緒也是一樣的,從巨集觀角度上理解執行緒是並行執行的,但是從微觀角度上分析卻是序列執行的,即一個執行緒一個執行緒的去執行,當系統只有一個CPU時,執行緒會以某種順序執行多個執行緒,我們把這種情況稱之為執行緒排程。

二、執行緒與程序

1、程序:是指一個記憶體中執行的應用程式,每個程序都有一個獨立的記憶體空間,一個應用程式可以同時執行多個程序;程序也是程式的一次執行過程,是系統執行程式的基本單位;系統執行一個程式即是一個程序從建立、執行到消亡的過程。

2、執行緒:執行緒是程序中的一個執行單元,負責當前程序中程式的執行,一個程序中至少有一個執行緒。一個程序中是可以有多個執行緒的,這個應用程式也可以稱之為多執行緒程式。

作業系統排程的最小任務單位是執行緒。常用的Windows、Linux等作業系統都採用搶佔式多工,如何排程執行緒完全由作業系統決定,程式自己不能決定什麼時候執行,以及執行多長時間。

(一)、執行緒的產生

每個程序都有自己的地址空間,即程序空間,在網路或多使用者換機下,一個伺服器通常需要接收大量不確定數量使用者的併發請求,為每一個請求都建立一個程序顯然行不通(系統開銷大響應使用者請求效率低),因此作業系統中執行緒概念被引進。執行緒的改變只代表CPU的執行過程的改變,而沒有發生程序所擁有的資源的變化。

  • 執行緒的執行過程是線性的,儘管中間會發生中斷或者暫停,但是程序所擁有的資源只為改線狀執行過程服務,一旦發生執行緒切換,這些資源需要被保護起來。
  • 程序分為單執行緒程序和多執行緒程序,單執行緒程序巨集觀來看也是線性執行過程,微觀上只有單一的執行過程。多執行緒程序巨集觀是線性的,微觀上多個執行操作。

(二)、程序與執行緒的區別

  • 地址空間。同一執行緒共享該程序的地址空間;程序之間是獨立的地址空間,
  • 用於資源。同一程序內的執行緒共享本程序的資源如記憶體、I/O、cpu等,但是程序之間的資源是獨立的。
  • 執行過程。每個獨立的程序程有一個程式執行的入口、順序執行序列和程式入口。但是執行緒不能獨立執行,必須依存在應用程式中,由應用程式提供多個執行緒執行控制。

(三)、優缺點

執行緒執行開銷小,但是不利於資源的管理和保護。執行緒適合在SMP機器(雙CPU系統)上執行。程序執行開銷大,但是能夠很好的進行資源管理和保護。程序可以跨機器前移。

(四)、使用場景

對資源的管理和保護要求高,不限制開銷和效率時,使用多程序。

要求效率高,頻繁切換時,資源的保護管理要求不是很高時,使用多執行緒。

三、執行緒的狀態

執行緒共包括以下5種狀態,也叫生命週期。
1. 新建狀態(New)         :執行緒物件被建立後,就進入了新建狀態。例如,Thread thread = new Thread()。
2. 就緒狀態(Runnable):也被稱為“可執行狀態”。執行緒物件被建立後,其它執行緒呼叫了該物件的start()方法,從而來啟動該執行緒。例如,thread.start()。處於就緒狀態的執行緒,隨時可能被CPU排程執行。
3. 執行狀態(Running)   :執行緒獲取CPU許可權進行執行。需要注意的是,執行緒只能從就緒狀態進入到執行狀態。
4. 阻塞狀態(Blocked)    :阻塞狀態是執行緒因為某種原因放棄CPU使用權,暫時停止執行。直到執行緒進入就緒狀態,才有機會轉到執行狀態。阻塞的情況分三種:
    ① 等待阻塞 -- 通過呼叫執行緒的wait()方法,讓執行緒等待某工作的完成。
    ② 同步阻塞 -- 執行緒在獲取 synchronized 同步鎖失敗(因為鎖被其它執行緒所佔用),它會進入同步阻塞狀態。
    ③ 其他阻塞 -- 通過呼叫執行緒的sleep()或join()或發出了I/O請求時,執行緒會進入到阻塞狀態。當sleep()狀態超時、join()等待執行緒終止或者超時、或者I/O處理完畢時,執行緒重新轉入就緒狀態。
5. 死亡狀態(Dead)         :執行緒執行完了或者因異常退出了run()方法,該執行緒結束生命週期。

四、多執行緒的原理

五、程序、執行緒實現多工模式

(一)、多程序模式(一個程序只有一個執行緒)

(二)、多執行緒模式(一個程序有多個執行緒)

(三)、多程序 + 多執行緒模式(複雜度最高)

相關推薦

Java 執行基礎基本概念

Java 多執行緒基礎(一)基本概念 一、併發與並行 1、併發:指兩個或多個事件在同一個時間段內發生。 2、並行:指兩個或多個事件在同一時刻發生(同時發生)。 在作業系統中,安裝了多個程式,併發指的是在一段時間內巨集觀上有多個程式同時執行,這在單 CPU 系統中,每一時刻只能有一道程式執行,即微觀上這些程

java執行系列基礎概念

前言 這一系列多執行緒的文章,一方面是個人對Java現有的多執行緒機制的學習和記錄,另一方面是希望能給不熟悉Java多執行緒機制、或有一定基礎但理解還不夠深的讀者一個比較全面的介紹,旨在使讀者對Java的多執行緒有一個遞增、全面和較深刻的理解,所以在第一部分就集中介紹一

java執行系列:Thread、Runnable、Callable實現執行的區別

實現多執行緒 java實現多執行緒的方法有三種,分別是繼承thread類,實現runnable介面,實現callable介面(call方法有返回值) /** * 繼承Thread */ public class MyThread extends Thread{ int a = 0;

java執行-初探

啥是多執行緒?跟程序又是啥關係?   比方說:我去洗手,洗完手去吃飯。 程序(Processor) 洗手跟吃飯是兩個程序。 執行緒(Thread) 在洗手的程序裡,我同時聽歌,還唱歌。那這裡洗手是一個程序,聽歌跟唱歌是兩個執行緒。 在吃飯的程序裡,我同時聽歌,還

執行基礎

最近讀了高洪巖的《Java多執行緒程式設計核心技術》一書,打算記錄下多執行緒的基礎知識點,也算對本書的一個讀後感了。目前打算分四五篇博文進行記錄。 第一篇主要是記錄執行緒的概念,建立,常用的基礎方法等。 1. 什麼是執行緒? 通常我們所說執行緒是程序的最小單位。那麼問題來了,什麼是程序呢?程序就是作業系統結構

Java執行學習Java執行入門

Java 併發的基礎知識,可能會在筆試中遇到,技術面試中也可能以併發知識環節提問的第一個問題出現。比如面試官可能會問你:“談談自己對於程序和執行緒的理解,兩者的區別是什麼?” 一 程序和多執行緒簡介 1.1 程序和執行緒 程序和執行緒的對比這一知識點

[Java 執行技術]執行和程序以及並行和併發的概念

程序與執行緒 1、 程序(Process)是計算機中的程式關於某資料集合上的一次執行活動,是系統進行資源分配和排程的基本單位,是作業系統結構的基礎。在早期面向程序設計的計算機結構中,程序是程式的基本執行實體;在當代面向執行緒設計的計算機結構中,程序是執行緒的容

Java 執行基礎執行等待與喚醒

 Java 多執行緒基礎(六)執行緒等待與喚醒 遇到這樣一個場景,當某執行緒裡面的邏輯需要等待非同步處理結果返回後才能繼續執行。或者說想要把一個非同步的操作封裝成一個同步的過程。這裡就用到了執行緒等待喚醒機制。 一、wait()、notify()、notifyAll() 等方法介紹 在 Object

Java 執行基礎執行讓步

 Java 多執行緒基礎(八)執行緒讓步 yield 一、yield 介紹 yield()的作用是讓步。它能讓當前執行緒由“執行狀態”進入到“就緒狀態”,從而讓其它具有相同優先順序的等待執行緒獲取執行權;但是,並不能保證在當前執行緒呼叫yield()之後,其它具有相同優先順序的執行緒就一定

Java 執行基礎interrupt()和執行終止方式

Java 多執行緒基礎(十)interrupt()和執行緒終止方式 一、interrupt() 介紹 interrupt() 定義在 Thread 類中,作用是中斷本執行緒。 本執行緒中斷自己是被允許的;其它執行緒呼叫本執行緒的 interrupt() 方法時,會通過 checkAccess() 檢查許可權。

Java 執行基礎執行優先順序和守護執行

 Java 多執行緒基礎(十一)執行緒優先順序和守護執行緒 一、執行緒優先順序 Java 提供了一個執行緒排程器來監控程式啟動後進去就緒狀態的所有執行緒。執行緒排程器通過執行緒的優先順序來決定排程哪些執行緒執行。一般來說,Java的執行緒排程器採用時間片輪轉演算法使多個執行緒輪轉獲得CPU的時間片。

java執行基礎synchronize關鍵字

基礎知識 執行緒:程序(process)就是一塊包含了某些資源的記憶體區域。作業系統利用程序把它的工作劃分為一些功能單元。 執行緒:程序中所包含的一個或多個執行單元稱為執行緒(thread)。程序還擁有一個私有的虛擬地址空間,該空間僅能被它所包含的執行

java執行 基礎

Thread.java類中的start()方法通知“執行緒規劃器”,此執行緒已準備就緒,等待呼叫執行緒物件的run()方法。這個過程就是讓系統安排一個時間來呼叫Thread中的run()方法,也就是使得執行緒得到執行,啟動執行緒,具有非同步執行的效果。 如果呼叫程式碼的thread.run()就不

java執行筆記

java對多執行緒程式設計提供了內建支援。多執行緒程式包含同時執行的兩個或多個部分。這種程式的每一部分被稱為一個執行緒,並且每一個執行緒定義了單獨的執行路徑。因此,多執行緒是特殊形式的多工處理。 程序:正在進行中的程式,是重量級任務,需要自己的地址空間。程序間通訊開銷很大,

Java ExecutorService 執行實踐

需要實現一個多執行緒併發的業務場景,啟動若干子執行緒,最後要所有子執行緒執行結束才結束。(類似 .NET 裡的 Task WaitAll )Java 中的 ExecutorService 多執行緒程式設計模型提供這樣一個機制,通過程式碼來介紹一下。方法一:ExecutorSe

執行系列執行基礎

執行緒相關概念 在學習多執行緒之前,先來了解下幾個與多執行緒相關的概念。 程序:程序是計算機的概念,程式在伺服器執行時佔據全部計算資源的總和,一個應用程式執行起來就是一個程序,開啟windows的工作管理員,如下圖 執行緒:執行緒也是計算機的概念,執行緒是程序的最小單位,也是程式在響應作業系統時的最小單位

java執行知識1

基礎概念 1.執行緒和程序: 程序有自己的獨立空間,而執行緒共享程序的空間 執行緒通訊方便,同一程序的執行緒共享全域性變數,靜態資料 多程序更健壯,多執行緒只要有一個執行緒死掉,整個程序也死 2.同步和非同步:同步必須等該方法的呼叫返回 3.並行和

java執行

一,鎖 在物件的建立時java會為每個object物件分配一個monitor( 監視器或者監視鎖),當某個物件的同步方法(synchronized methods )被多個執行緒呼叫時,該物件的monitor將負責處理這些訪問的併發獨佔要求。 當一個執行緒呼叫一個物件的同步方法時(sy

執行基礎-執行併發安全問題

多執行緒基礎(三)-多執行緒併發安全問題 當多個執行緒併發操作同一資源時,由於執行緒切換實際不可控會導致操作邏輯執行順序出現混亂,嚴重時會導致系統癱瘓。例如下面的程式碼 public class SyncDemo { public static void main(Strin

Java執行學習:AQS 原理以及 AQS 同步元件總結

常見問題:AQS 原理?;CountDownLatch和CyclicBarrier瞭解嗎,兩者的區別是什麼?用過Semaphore嗎? 本節思維導圖: 阿里雲產品 1888 代金券領取:https://promotion.aliyun.com/ntms