Java多線程基礎(二)
基本概念
進程:程序的執行過程。持有資源(共享內存、共享文件)和線程。
線程:
- 是一個程序內部的順序控制流。
- 它包含在進程之中,是系統中最小執行單元,同一個進程可以有多個線程。
- 線程共享進程的資源。
線程和進程對比:
- 每個進程都有獨立的代碼和數據空間(進程上下文),進程切換的開銷大。
- 線程:輕量的進程,同一類線程共享代碼和數據空間,每個線程有獨立的運行棧和程序計數器(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多線程基礎(二)