大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 2020年學Java多線程,最好的教程素材

2020年學Java多線程,最好的教程素材

更新時間:2019-12-31 09:36:09 來源:動力節點 瀏覽2174次


  在開發中我們經常使用線程來優化程序,提高系統執行效率,今天我們就來簡單概述一下Java開發過程中需要了解的多線程知識點


2020年學Java多線程,最好的教程素材


  一、進程與線程


  進程(Process)是計算機中的程序關于某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,是操作系統結構的基礎。


  線程,有時被稱為輕量級進程(Lightweight Process,LWP),是程序執行流的最小單元。線程是程序中一個單一的順序控制流程,在單個程序中同時運行多個線程完成不同的工作,稱為多線程。


  進程和線程的關系可以用下圖來描述:


  二、同步與異步


  對于一次方法的調用來說,同步方法調用一旦開始,就必須等待該方法的調用返回,后續的方法才可以繼續執行;異步的話,方法調用一旦開始,就可以立即返回,調用者可以執行后續的方法,這里的異步方法通常會在另一個線程里真實的執行,而不會妨礙當前線程的執行。


  三、并行與并發


  并發和并行是兩個相對容易比較混淆的概念。他都可以表示在同一時間范圍內有兩個或多個任務同時在執行,但其在任務調度的時候還是有區別的,首先看下圖:


  并發任務執行過程:


  從上圖中可以看到,兩個任務在執行的時候,并發是沒有時間上的重疊的,兩個任務是交替執行的,由于切換的非常快,對于外界調用者來說相當于同一時刻多個任務一起執行了;而并行可以看到時間上是由重疊的,也就是說并行才是真正意義上的同一時刻可以有多個任務同時執行。


  四、線程的狀態


  線程從創建、運行到結束總是處于下面五個狀態之一:新建狀態、就緒狀態、運行狀態、阻塞狀態及死亡狀態。


  1、新建狀態(New):


  當用new操作符創建一個線程時,例如new Thread(r),線程還沒有開始運行,此時線程處在新建狀態。 當一個線程處于新生狀態時,程序還沒有開始運行線程中的代碼。


  2、就緒狀態(Runnable)


  一個新創建的線程并不自動開始運行,要執行線程,必須調用線程的start()方法。當線程對象調用start()方法即啟動了線程,start()方法創建線程運行的系統資源,并調度線程運行run()方法。當start()方法返回后,線程就處于就緒狀態,處于就緒狀態的線程并不一定立即運行run()方法,線程還必須同其他線程競爭CPU時間,只有獲得CPU時間才可以運行線程。因為在單CPU的計算機系統中,不可能同時運行多個線程,一個時刻僅有一個線程處于運行狀態。因此此時可能有多個線程處于就緒狀態,對多個處于就緒狀態的線程是由Java運行時系統的線程調度程序(thread scheduler)來調度的。


  3、運行狀態(Running)


  當線程獲得CPU時間后,它才進入運行狀態,真正開始執行run()方法。


  4、 阻塞狀態(Blocked)


  線程運行過程中,可能由于各種原因進入阻塞狀態: 1)線程通過調用sleep方法進入睡眠狀態; 2)線程調用一個在I/O上被阻塞的操作,即該操作在輸入輸出操作完成之前不會返回到它的調用者; 3)線程試圖得到一個鎖,而該鎖正被其他線程持有; 4)線程在等待某個觸發條件; ...... 所謂阻塞狀態是正在運行的線程沒有運行結束,暫時讓出CPU,這時其他處于就緒狀態的線程就可以獲得CPU時間,進入運行狀態。


  5、 死亡狀態(Dead)


  有兩個原因會導致線程死亡: 1) run方法正常退出而自然死亡; 2) 一個未捕獲的異常終止了run方法而使線程猝死。 為了確定線程在當前是否存活(就是要么是可運行的,要么是被阻塞了),需要使用isAlive方法。如果是可運行或被阻塞,這個方法返回true; 如果線程仍舊是new狀態且不是可運行的, 或者線程死亡了,則返回false。


  現在我們用一張圖來說明它們之間的狀態:


  五、創建線程的三種方式


  (1)繼承Thread類創建線程類


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


  2、創建Thread子類的實例,即創建了線程對象。


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


  方法的方法體就是主線程的線程執行體。


  可以看到Thread-0和Thread-1兩個線程的輸出的i變量不連續 注意:i變量是FirstThread的實例變量,而不是局部變量,但是因為程序每次創建線程對象都需要創建一個FirstThread對象,所以Thread-0和Thread-1不能共享該實例變量。


  使用繼承Thread類的方法來創建線程類時,多個線程之間是無法共享線程類的實例變量。


  (2) 實現Runnable接口創建線程類


  1、定義Runnable接口的實現類,并重寫該接口的run()方法,該run()方法的方法體同樣是該線程的線程執行體。


  2、創建Runnable實現類的實例,并以此實例作為Thread的target來創建Thread對象,該Thread對象才是真正的線程對象。


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


  當線程類實現Runnable接口時,如果想獲取當前線程,只能用Thread.currentThread()方法可以看到兩個子線程的i變量是連續的這是因為采用Runnable接口的方式創建的多個線程可以共享線程類的實例變量.是因為:程序創建的Runnable對象只是線程的target,而多個線程可以共享一個target,所以多個線程可以共享一個線程類(實際上應該是線程的target類)的實例變量。


  (3)使用Callable和Future創建線程


  通過實現Runnable接口創建多線程時,Thread類的作用就是把run()方法包裝成線程執行體.從方法可以聲明拋出的異常。


  但是Callable接口并不是Runnable接口的子接口,所以Callable對象不能直接作為Thread的target.而且call()方法還有一個返回值,call()方法并不是直接調用的,它是作為線程執行體被調用的.好在方法的返回值,并為Future接口提供了一個FutureTask實現類,該實現類既實現了Future接口,并實現了Runnable接口----可以作為Thread類的target。


  在Future接口里定義了幾個公共方法來控制它關聯的Callable任務。


  Callable接口有泛型限制,并且Callable接口里的泛型形參類型與call()方法返回值類型相同.而且Callable接口是函數式接口,可以用Lambda表達式創建Callable對象。


  創建并啟動具有返回值的線程的步驟如下:


  1、創建Callable接口的實現類,并實現call()方法,該call()方法將作為線程執行體,且該call()方法有返回值,再創建Callable實現類的實例。


  2、使用FutureTask類來包裝Callable對象,該FutureTask對象封裝了該Callable對象的call()方法的返回值。


  3、使用FutureTask對象作為Thread對象的target創建并啟動新線程。


  4、調用FutureTask對象的get()方法來獲得子線程執行結束后的返回值。


  (4)創建線程的三種方式對比


  采用實現Runnable、Callable接口的方式創建多線程的優缺點:


  1、線程類只是實現了Runnable接口或Callable接口,還可以繼承其他類。


  2、多個線程可以共享同一個target對象,非常適合多個相同線程來處理同一份資源的情況,較好的體現了面向對象的思想。


  3、需要訪問當前線程,則必須使用Thread.currentThread()方法。


  采用繼承Thread類的方式創建多線程的優缺點:


  1、因為該線程已經繼承了Thread類,所以不能在繼承其他父類。


  2、編寫簡單,如果需要訪問當前線程,則無需使用Thread.currentThread()方法,直接使用this即可獲得當前線程。


2020年學Java多線程,最好的教程素材


       以上就是動力節點Java培訓機構小編介紹的“2020年學Java多線程,最好的教程素材”的內容,希望對大家有幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。


  相關內容


  Java多線程編程詳解


  java多線程的狀態轉換以及基本操作


  JAVA多線程實現的四種方式


  Java多線程學習,深入解析


  常見Java多線程面試題總結


提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 久久88香港三级台湾三级中文 | 曰本女人色黄网站 | 亚洲精品美女一区二区三区乱码 | www.黄色网 | 乱人伦中文视频在线 | 99热这里只有精品2 99热这里只有精品3 | 丁香综合在线 | 欧美美女一区二区三区 | 日本不卡视频在线播放 | 久草在线国产 | 日本亚洲精品成人 | 国产伦精品一区二区三区免费观看 | 香蕉视频免费在线 | 亚洲精品国产综合一线久久 | 欧美黄色免费网址 | 欧美啪啪毛片一区二区 | 亚洲精品a | 国产日产欧产美一二三区 | 久久久久亚洲精品影视 | 国产福利小视频在线观看 | 欧美日韩亚洲m码色帝国 | 日韩欧美中文字幕在线播放 | 免费一级毛片在播放视频 | 末成年娇小性色xxxxx视频 | 嫩草影院麻豆久久视频 | 亚洲欧美一区二区三区 | 老司机性视频 | 九九热亚洲精品综合视频 | 国产一级大片免费看 | jizzjizzjizz护士 | 国内精品久久久久影 | 中文日产国产精品久久 | 老太婆性杂交毛片 | 国产成人h综合亚洲欧美在线 | 九九热线精品视频6一 | 婷婷视频在线观看 | 久久福利影院 | 亚洲精品第四页中文字幕 | 澳门一级特黄录像免费播黄 | 一区二区三区在线视频观看 | 欧美三级做爰在线 |