日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

黑马程序员—————— 多线程

發布時間:2023/12/10 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 黑马程序员—————— 多线程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

java使用Thread類代表線程,所有的線程對象都必須是Thread類或其子類的實例。每個線程的作用是完成一定的任務,實際上就是執行一段程序流(一段順序執行的代碼)。java使用線程執行體來代表這段程序流。

?

繼承Thread類創建線程類

通過繼承Thread類來創建并啟動多線程的步驟如下:

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

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

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

?

實現Runnable接口創建線程類

實現Runnable接口來創建并啟動多線程的步驟如下。

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

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

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

?

java5提供了Callable接口,該接口則呢呣看都像是Runable接口的增強版,Callable接口提供了一個call()方法可以作為線程執行體,但call()方法比run()方法功能更加強大。

1:call()方法可以有返回值

2:call()方法可以聲明拋出異常

因此完全可以提供一個Callable對象作為Thread的target,而該線程的線程執行體就是該Callable對象的call()方法。問題是,Callable接口是java5新增的接口,而且它不是Runnable接口的子接口。所以Collable對象不能直接作為Thread的target.而且call()方法還有一個返回值,call方法并不是直接調用,他是作為線程執行體被調用的那么如何獲取call()的返回值呢?

jiava5提供了Future接口來代表Callable接口里call()方法的返回值,并為Future接口提供了一個實現類FutureTask。該實現類實現了Future接口,并實現了Runnable接口。可以作為Thread類的target.

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

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

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

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

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

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

?

?

?

1:多線程
(1)多線程:一個應用程序有多條執行路徑
進程:正在執行的應用程序
線程:進程的執行單元,執行路徑
單線程:一個應用程序只有一條執行路徑
多線程:一個應用程序有多條執行路徑

多進程的意義?
提高CPU的使用率
多線程的意義?
提高應用程序的使用率
(2)Java程序的運行原理及JVM的啟動是多線程的嗎?
A:Java命令去啟動JVM,JVM會啟動一個進程,該進程會啟動一個主線程。
B:JVM的啟動是多線程的,因為它最低有兩個線程啟動了,主線程和垃圾回收線程。
(3)多線程的實現方案(自己補齊步驟及代碼 掌握)
A:繼承Thread類
B:實現Runnable接口
(4)線程的調度和優先級問題
A:線程的調度
a:分時調度
b:搶占式調度 (Java采用的是該調度方式)
B:獲取和設置線程優先級
a:默認是5
b:范圍是1-10
(5)線程的控制(常見方法)
A:休眠線程
B:加入線程
C:禮讓線程
D:后臺線程
E:終止線程
(6)線程的生命周期
A:新建
B:就緒
C:運行
D:阻塞
E:死亡


多線程安全問題的原因(也是我們以后判斷一個程序是否有線程安全問題的依據)
A:是否有多線程環境
B:是否有共享數據
C:是否有多條語句操作共享數據

同步解決線程安全問題
A:同步代碼塊
synchronized(對象) {
需要被同步的代碼;
}

這里的鎖對象可以是任意對象。

B:同步方法
把同步加在方法上。

這里的鎖對象是this

C:靜態同步方法
把同步加在方法上。

轉載于:https://www.cnblogs.com/-9527/p/5230699.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的黑马程序员—————— 多线程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。