Java多線程編程核心技術(第2版)》 —1 Java多線程技能

      網友投稿 724 2022-05-29

      第1章

      Java多線程技能

      作為本書的第1章,重點是讓讀者快速進入Java多線程的學習,所以本章主要介紹Thread類的核心方法。Thread類的核心方法較多,讀者應該著重掌握如下技術點:

      線程的啟動;

      如何使線程暫停;

      如何使線程停止;

      線程的優先級;

      線程安全相關的問題。

      以上內容也是本章學習的重點與思路,掌握這些內容是進入Java多線程學習的必經之路。

      1.1 進程和多線程概述

      本書主要介紹在Java語言中使用的多線程技術,但講到多線程技術時不得不提及“進程”這個概念,“百度百科”對“進程”的解釋如圖1-1所示。

      圖1-1 進程的定義

      初看這段文字十分抽象,難以理解,那么再來看如圖1-2所示的內容。

      圖1-2 Windows 7系統中的進程列表

      難道一個正在操作系統中運行的exe程序可以理解成一個“進程”?沒錯!

      通過查看“Windows任務管理器”窗口中的列表,完全可以將運行在內存中的exe文件理解成進程—進程是受操作系統管理的基本運行單元。

      程序是指令序列,這些指令可以讓CPU完成指定的任務。*.java程序經編譯后形成*.class文件,在Windows中啟動一個JVM虛擬機相當于創建了一個進程,在虛擬機中加載class文件并運行,在class文件中通過執行創建新線程的代碼來執行具體的任務。創建測試用的代碼如下:

      public class Test1 {

      public static void main(String[] args) {

      try {

      Thread.sleep(Integer.MAX_VALUE);

      } catch (InterruptedException e) {

      e.printStackTrace();

      }

      }

      }

      在沒有運行這個類之前,任務管理器中以“j”開頭的進程列表如圖1-3所示。

      圖1-3 任務管理器中以“j”開頭的進程

      Test1類重復運行3次后的進程列表如圖1-4所示。可以看到,在任務管理器中創建了3個javaw.exe進程,說明每執行一次main()方法就創建一個進程,其本質上就是JVM虛擬機進程。

      圖1-4 創建了3個javaw.exe進程

      那什么是線程呢?線程可以理解為在進程中獨立運行的子任務,例如,QQ.exe運行時,很多的子任務也在同時運行,如好友視頻線程、下載文件線程、傳輸數據線程、發送表情線程等,這些不同的任務或者說功能都可以同時運行,其中每一項任務完全可以理解成是“線程”在工作,傳文件、聽音樂、發送圖片表情等這些功能都有對應的線程在后臺默默地運行。

      進程負責向操作系統申請資源。在一個進程中,多個線程可以共享進程中相同的內存或文件資源。

      使用多線程有什么優點呢?其實如果有使用“多任務操作系統”的經驗,如Windows系列,大家應該都有這樣的體會:使用多任務操作系統Windows,可以大幅利用CPU的空閑時間來處理其他任務,例如,可以一邊讓操作系統處理正在用打印機打印的數據,一邊使用Word編輯文檔。CPU在這些任務中不停地進行切換,由于切換的速度非常快,給使用者的感受是這些任務在同時運行,所以使用多線程技術可以在同一時間內執行更多不同的任務。

      為了更加有效地理解多線程的優勢,下面先來看如圖1-5所示的單任務運行環境。

      《Java多線程編程核心技術(第2版)》 —1 Java多線程技能

      在圖1-5中,任務1和任務2是兩個完全獨立、不相關的任務。任務1在等待遠程服務器返回數據,以便進行后期處理,這時CPU一直呈等待狀態,一直在“空運行”。任務2在10s之后被運行,雖然執行完任務2所用時間非常短,僅僅是1s,但也必須等任務1運行結束后才可以運行任務2,本程序運行在單任務環境中,所以任務2有非常長的等待時間,系統運行效率大幅降低。單任務的特點就是排隊執行,即同步,就像在cmd中輸入一條命令后,必須等待這條命令執行完才可以執行下一條命令。在同一時間只能執行一個任務,CPU利用率大幅降低,這就是單任務運行環境的缺點。

      多任務運行環境如圖1-6所示。

      在圖1-6中,CPU完全可以在任務1和任務2之間來回切換,使任務2不必等到10s之后再運行,系統和CPU的運行效率大大提升,這就是為什么要使用多線程技術、為什么要學習多線程。多任務的特點是在同一時間可以執行多個任務,這也是多線程技術的優點。使用多線程也就是在使用異步。

      在通常情況下,單任務和多任務的實現與操作系統有關。例如,在一臺計算機上使用同一個CPU,安裝DOS磁盤操作系統只能實現單任務運行環境,而安裝Windows操作系統則可以實現多任務運行環境。

      在什么場景下使用多線程技術?筆者總結了兩點。

      1)阻塞。一旦系統中出現了阻塞現象,則可以根據實際情況來使用多線程技術提高運行效率。

      2)依賴。業務分為兩個執行過程,分別是A和B。當A業務發生阻塞情況時,B業務的執行不依賴A業務的執行結果,這時可以使用多線程技術來提高運行效率;如果B業務的執行依賴A業務的執行結果,則可以不使用多線程技術,按順序進行業務的執行。

      在實際的開發應用中,不要為了使用多線程而使用多線程,要根據實際場景決定。

      多線程是異步的,所以千萬不要把Eclipse代碼的順序當作線程執行的順序,線程被調用的時機是隨機的。

      軟件開發 Java Java

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:虛擬文件系統proc中的重要信息
      下一篇:與華為云社區一起成長
      相關文章
      亚洲综合国产精品| 亚洲人成电影在线播放| 亚洲愉拍99热成人精品热久久 | 欧洲 亚洲 国产图片综合| 亚洲男人电影天堂| 337p日本欧洲亚洲大胆精品555588| 国产亚洲综合久久系列| a级亚洲片精品久久久久久久| 亚洲七七久久精品中文国产| 亚洲成av人片天堂网老年人| 午夜亚洲国产精品福利| 国产成人高清亚洲一区久久| 亚洲AV无码一区二区三区牲色| 亚洲精品久久无码| 亚洲AV第一成肉网| 无码不卡亚洲成?人片| 日批日出水久久亚洲精品tv| 亚洲综合色成在线播放| 中文亚洲成a人片在线观看| 亚洲色欲一区二区三区在线观看| 亚洲精品乱码久久久久久蜜桃不卡 | 久久综合日韩亚洲精品色| 亚洲成a人片77777kkkk| 亚洲AV永久无码区成人网站| 亚洲av无码不卡一区二区三区| 无码专区—VA亚洲V天堂| 97亚洲熟妇自偷自拍另类图片 | 亚洲国产精品精华液| 亚洲AV日韩AV一区二区三曲| 精品久久亚洲一级α| 亚洲精品tv久久久久| 一本久久a久久精品亚洲| 亚洲成AV人片在线观看无| 亚洲精品线在线观看| 亚洲国产精品线观看不卡| 亚洲性色AV日韩在线观看| 久久精品国产亚洲AV电影网| 亚洲欧洲中文日韩久久AV乱码 | 曰韩亚洲av人人夜夜澡人人爽| 国产日韩亚洲大尺度高清| 亚洲天天做日日做天天欢毛片|