中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java多線程并發、并行、線程與進程實例分析

發布時間:2022-06-15 11:52:24 來源:億速云 閱讀:145 作者:iii 欄目:開發技術

本篇內容介紹了“Java多線程并發、并行、線程與進程實例分析”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

一、并發與并行

  • 并發:指兩個或多個事件在同一個時間段內發生。

  • 并行:指兩個或多個事件在同一時刻發生(同時發生)。

Java多線程并發、并行、線程與進程實例分析

在操作系統中,安裝了多個程序,并發指的是在一段時間內宏觀上有多個程序同時運行,這在單 CPU 系統中,每一時刻只能有一道程序執行,即微觀上這些程序是分時的交替運行,只不過是給人的感覺是同時運行,那是因為分時交替運行的時間是非常短的。 而在多個 CPU 系統中,則這些可以并發執行的程序便可以分配到多個處理器上(CPU),實現多任務并行執行,即利用每個處理器來處理一個可以并發執行的程序,這樣多個程序便可以同時執行。目前電腦市場上說的多核 CPU,便是多核處理器,核 越多,并行處理的程序越多,能大大的提高電腦運行的效率。

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

二、線程與進程

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

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

簡而言之:一個程序運行后至少有一個進程,一個進程中可以包含多個線程

我們可以再電腦底部任務欄,右鍵----->打開任務管理器,可以查看當前任務的進程: 進程 

Java多線程并發、并行、線程與進程實例分析

 線程 

 線程調度:

  • 分時調度:所有線程輪流使用 CPU 的使用權,平均分配每個線程占用 CPU 的時間。

  • 搶占式調度:優先讓優先級高的線程使用 CPU,如果線程的優先級相同,那么會隨機選擇一個(線程隨機性),Java使用的為搶占式調度。

  • 設置線程的優先級

Java多線程并發、并行、線程與進程實例分析

搶占式調度詳解:

大部分操作系統都支持多進程并發運行,現在的操作系統幾乎都支持同時運行多個程序。比如:現在我們上課一邊使用編輯器,一邊使用錄屏軟件,同時還開著畫圖板,dos窗口等軟件。此時,這些程序是在同時運行,”感覺這些軟件好像在同一時刻運行著“。 實際上,CPU(中央處理器)使用搶占式調度模式在多個線程間進行著高速的切換。對于CPU的一個核而言,某個時刻,只能執行一個線程,而 CPU的在多個線程間切換速度相對我們的感覺要快,看上去就是在同一時刻運行。 其實,多線程程序并不能提高程序的運行速度,但能夠提高程序運行效率,讓CPU的使用率更高。 

Java多線程并發、并行、線程與進程實例分析

三、創建線程類

Java使用java.lang.Thread類代表線程,所有的線程對象都必須是Thread類或其子類的實例。每個線程的作用是完成一定的任務,實際上就是執行一段程序流即一段順序執行的代碼。Java使用線程執行體來代表這段程序流。Java中通過繼承Thread類來創建啟動多線程的步驟如下:

  • 定義Thread類的子類,并重寫該類的run()方法,該run()方法的方法體就代表了線程需要完成的任務,因此把run()方法稱為線程執行體。

  • 創建Thread子類的實例,即創建了線程對象

  • 調用線程對象的start()方法來啟動該線程

代碼如下: 測試類:

public class Demo01 {
	public static void main(String[] args) {
		//創建自定義線程對象
		MyThread mt = new MyThread("新的線程!");
		//開啟新線程
		mt.start();
		//在主方法中執行for循環
		for (int i = 0; i < 10; i++) {
			System.out.println("main線程!"+i);
		}
	}
}

自定義線程類:

public class MyThread extends Thread {
	//定義指定線程名稱的構造方法
	public MyThread(String name) {
		//調用父類的String參數的構造方法,指定線程的名稱
		super(name);
	}
	/**
	 * 重寫run方法,完成該線程執行的邏輯
	 */
	@Override
	public void run() {
		for (int i = 0; i < 10; i++) {
			System.out.println(getName()+":正在執行!"+i);
		}
	}
}

“Java多線程并發、并行、線程與進程實例分析”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

池州市| 汶川县| 邯郸县| 舒兰市| 资溪县| 长沙县| 临邑县| 逊克县| 二连浩特市| 永吉县| 扎鲁特旗| 霸州市| 伽师县| 凤翔县| 宁津县| 收藏| 安化县| 疏附县| 浦江县| 喀什市| 崇义县| 凤山市| 泰州市| 吴堡县| 沁源县| 台安县| 缙云县| 滁州市| 禹城市| 锦州市| 碌曲县| 家居| 佛学| 阿巴嘎旗| 多伦县| 侯马市| 保德县| 军事| 子长县| 凤凰县| 齐齐哈尔市|