1. 程式人生 > >Java多線程基礎(二)

Java多線程基礎(二)

常用 進程上下文 技術 進入 返回 ren 說明 多線程基礎 常用api

基本概念

進程:程序的執行過程。持有資源(共享內存、共享文件)和線程。

線程:

- 是一個程序內部的順序控制流。

- 它包含在進程之中,是系統中最小執行單元,同一個進程可以有多個線程。

- 線程共享進程的資源。

線程和進程對比:

- 每個進程都有獨立的代碼和數據空間(進程上下文),進程切換的開銷大。

- 線程:輕量的進程,同一類線程共享代碼和數據空間,每個線程有獨立的運行棧和程序計數器(PC),線程切換的開銷小。

多進程:在操作系統中,能同時運行多個任務(程序)。

多線程:在同一應用程序中,有多個順序流同時執行。

線程的交互:

技術分享

通過Thread類創建線程

Thread類

直接繼承了Object類,並實現了Runnable接口。位於java.lang包中。

封裝了線程對象需要的屬性和方法

繼承Thread類——創建多線程的方法之一

- 繼承Thread類(從Thread類派生一個子類,並創建子類的對象)

- 子類應該重寫Thread類的run方法,寫入需要在新線程中執行的語句段

- 調用start方法來啟動新線程,自動進入run方法

技術分享

技術分享

執行結果:

主線程開啟

主線程結束

新線程開啟

10:3628800

新線程結束

結果說明:

(1)main線程已經執行完後,新線程才開始執行完

(2)main方法調用thread.start()方法啟動新線程後並不等待其run方法返回就繼續運行,線程的run方法在一邊獨自運行,不影響原來的main方法的運行


線程的休眠

線程休眠的原因就是要讓其他線程得到執行的機會。

如果啟動新線程後希望主線程多持續一會再結束,可在start語句後加上讓當前線程(這裏當然是main)休眠1毫秒的語句。

技術分享

執行結果:

主線程開啟

新線程開啟

10:3628800

新線程結束

主線程結束

案例2:開啟三個線程,每個線程休眠0~6毫秒

技術分享

技術分享

執行結果:

開啟線程

主線程結束

thread1準備休眠:2081

thread3準備休眠:5298

thread2準備休眠:2812

thread1休眠結束

thread2休眠結束

thread3休眠結束

說明:由於線程3休眠時間最長,所以最後結束,線程1休眠時間最短,所以最先結束。


學習檢測

1、下列說法中錯誤的一項是

一個線程是一個Thread類的實例

線程從傳遞給純種的Runnable實例run()方法開始執行

線程操作的數據來自Runnable實例

新建的線程調用start()方法就能立即進入運行狀態 新建的線程調用start()方法就能立即進入運行狀態 - 正確

2、下列關於Thread類提供的線程控制方法的說法中,錯誤的一項是

在線程A中執行線程B的join()方法,則線程A等待直到B執行完成

線程A通過調用interrupt()方法來中斷其阻塞狀態

若線程A調用方法isAlive()返回值為true,則說明A正在執行中

currentThread()方法返回當前線程的引用 currentThread()方法返回當前線程的引用 - 正確

3、下列關於線程的說法以中,正確的一項是

由同一類創建的多個線程都同時運行結束

創建線程只能通過繼承java.lang.Thread類

調用suspend()方法暫停的一個線程將不會再被重新執行

程序的執行完畢與超級線程(daemon threads)無關 程序的執行完畢與超級線程(daemon threads)無關 - 正確


Thread類常用API

技術分享

技術分享

Java多線程基礎(二)