Java講課筆記33:多線程概述與線程創建

零、本講學習目標

1、瞭解多線程的概念

2、掌握多線程創建的三種方式

3、熟悉創建多線程三種方式的主要區別

一、進程概述

(一)進程定義

在一個操作系統中,每個獨立執行的程序都可稱之爲一個進程,也就是“正在運行的程序”。例如同時運行的QQ、360安全衛士、Eclipse開發工具等。

進程 = 程序 + 執行。當把一個程序從磁盤中加載到內存中,CPU去運算和處理這個進程(運行起來的程序就是進程)。

(二)三維度看待進程模型

維度 說明
從內存維度 每個進程都獨佔一塊地址空間,CPU處理進程實際上就是處理這個進程內存的首地址到尾地址的數據庫信息
從執行的邏輯維度 每一個進程都可以被CPU所處理和計算,此外,每一個進程也可以掛起,讓其他進程得以處理。在同一個時刻,只能有一個進程被cpu所處理。總結:進程模型,在宏觀上是並行處理的,但是微觀上看,是“串行”處理的(單核)。如果是多核架構,宏觀和微觀上都是並行處理的。
時間維度 每個進程執行一段時間之後,肯定都完成了一定的工作量。即進程是隨時間向前推進的。

(三)進程說明

  • 在多任務操作系統中,表面上看是支持進程併發執行的,例如可以一邊聽音樂一邊聊天,但實際上這些進程並不是在同一時刻運行的。
  • 在計算機中,所有的應用程序都是由CPU執行的,對於一個CPU而言,在某個時間點只能運行一個程序,也就是說只能執行一個進程,操作系統會爲每一個進程分配一段有限的CPU使用時間,CPU在這段時間中執行某個進程,然後會在下一段時間切換到另一個進程中去執行。
  • 由於CPU運行速度非常快,能在極短的時間內在不同的進程之間進行切換,所以給人以同時執行多個程序的感覺。

(四)進程三種狀態

1、執行態(Running)

一個進程正在被CPU運行,這個進程成爲執行態進程。

2、就緒態(Ready)

一個進程由於執行了很長時間,主動掛起,讓其它進程得以處理,這個進程稱之爲就緒態進程。

3、阻塞態(Blocking)

  • 一個進程由於發生了某些阻塞操作,比如I/O事件
  • 用戶主動將進程掛起,比如sleep操作

針對這兩類進程,即使把CPU讓給這個進程,CPU也處理不了;這樣掛起的進程稱之爲阻塞態進程。

在這裏插入圖片描述

二、線程概述

(一)線程定義

  • 在多任務操作系統中,每個運行的程序都是一個進程,用來執行不同的任務,而在一個進程中還可以有多個執行單元同時運行,來同時完成一個或多個程序任務,這些執行單元可以看做程序執行的一條條線索,被稱爲線程。
  • 操作系統中的每一個進程中都至少存在一個線程,當一個Java程序啓動時,就會產生一個進程,該進程中會默認創建一個線程,在這個線程上會運行main()方法中的代碼。

(二)單線程與多線程

在這裏插入圖片描述

1、單線程

單線程都是按照調用順序依次往下執行,沒有出現多段程序代碼交替運行的效果,而多線程程序在運行時,每個線程之間都是獨立的,它們可以併發執行。

2、多線程

多線程可以充分利用CUP資源,進一步提升程序執行效率。多線程看似是同時併發執行的,其實不然,它們和進程一樣,也是由CPU控制並輪流執行的,只不過CPU運行速度非常快,故而給人同時執行的感覺。

三、線程創建

Java爲多線程開發提供了非常優秀的技術支持,在Java中,可以通過三種方式來實現多線程。

(一)繼承Thread類,重寫run()方法

(二)實現Runnable接口,重寫run()方法

(三)實現Callable接口,重寫call()方法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章