成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

為什么啟動線程不直接調(diào)用run(),而要調(diào)用start(),如果調(diào)用兩次start()方法會有什么后果

開發(fā) 前端
1位工作6年的小伙伴去某里P6一面,被問到這樣一道面試題,說,為什么啟動一個線程不直接調(diào)用run()方法,而要調(diào)用start()方法來啟動,如果調(diào)用兩次start()會有什么后果?

1位工作6年的小伙伴去某里P6一面,被問到這樣一道面試題,說,為什么啟動一個線程不直接調(diào)用run()方法,而要調(diào)用start()方法來啟動,如果調(diào)用兩次start()會有什么后果?

如果,你被問到這樣一道面試,你能回答出來嗎?今天,我給大家來分享一下,我對這個問題的理解。

1、run()和start()的區(qū)別

首先回答為什么啟動線程不能直接調(diào)用run()方法,而要調(diào)用start()方法,我從以下4個方面來回答:

圖片

第1:start()方法是Java線程約定的內(nèi)置方法,能夠確保代碼在新的線程上下文中運(yùn)行。

第2:start()方法包含了觸創(chuàng)建新線程的特殊代碼邏輯。run()方法是我們自己寫的代碼,很顯然沒有這個能力。

第3:如果直接調(diào)用run()方法,那么它只是一個普通的方法調(diào)用,程序中依然只有一個主線程,并且只能順序執(zhí)行,需要等待run()方法執(zhí)行結(jié)束后才能繼續(xù)執(zhí)行后面的代碼。

第4:我們創(chuàng)建線程的目的是為了更充分地利用CPU資源,如果直接調(diào)用run()方法,就失去了創(chuàng)建線程的意義了。

2、調(diào)用兩次start()的后果

了解了run()方法和start()方法的區(qū)別,那如果調(diào)用兩次start()方法會有什么后果呢?在Java中,線程的start()方法只能被調(diào)用一次,如果第二次調(diào)用會拋出 IllegalThreadStateException,這是一種運(yùn)行時(shí)異常,多次調(diào)用 start 被認(rèn)為是編程錯誤。

圖片

在Java中,線程的運(yùn)行狀態(tài)被定義成了5個枚舉值,分別是:

(1)新建(NEW),線程已經(jīng)創(chuàng)建好了,但是還沒有調(diào)用start()方法啟動。

(2)就緒(RUNNABLE),這個狀態(tài)下的線程可能正在運(yùn)行,也可能還在就緒隊(duì)列里面,等待系統(tǒng)分配CPU資源。

在操作系統(tǒng)中,會額外區(qū)分一種狀態(tài)叫做RUNNING,但是從 Java API 的角度,并不能表示出來。

(3)阻塞(BLOCKED),表示線程處于等待Monitor Lock的狀態(tài)。

(4)等待(WAITING),表示線程處于條件等待狀態(tài),當(dāng)觸發(fā)條件后會喚醒。比如wait/notify等。

(5)計(jì)時(shí)等待(TIMED_WAIT),它和WAITING狀態(tài)是一樣的,只是多了一個超時(shí)條件觸發(fā)機(jī)制。

(6)終止(TERMINATED),表示線程執(zhí)行結(jié)束。

在Java API 中,影響線程運(yùn)行狀態(tài)的因素,如圖所示:

圖片

在我們第一次調(diào)用 start() 方法的時(shí)候,線程可能處于終止或者其他非 NEW的狀態(tài),再次調(diào)用start()方法的時(shí)候,相當(dāng)于讓這個正在運(yùn)行的線程重新運(yùn)行一遍。不管是從線程安全的角度來看,還是從線程本身的執(zhí)行邏輯來看,它都是不合理的。

因此,為了避免這個問題出現(xiàn),Java會先去判斷當(dāng)前線程的運(yùn)行狀態(tài)。

好了,以上就是我對Java線程的start()方法和run()方法的理解。

責(zé)任編輯:武曉燕 來源: Tom彈架構(gòu)
相關(guān)推薦

2020-05-12 08:56:16

Java 線程開發(fā)

2022-02-15 07:03:04

start 源碼run線程

2009-08-26 16:58:12

調(diào)用C# Thread

2020-12-30 10:04:46

userMapper接口

2020-05-29 09:34:28

httphttps網(wǎng)絡(luò)協(xié)議

2020-12-15 07:36:12

線程Start Run

2024-10-16 08:38:37

TCP編號信息

2022-12-06 08:26:16

SpringAOPthis調(diào)用方法

2023-12-08 08:40:16

函數(shù)

2022-01-28 00:00:42

高并發(fā)線程順序

2024-11-21 10:38:10

2023-02-01 08:11:40

系統(tǒng)調(diào)用函數(shù)

2022-11-07 10:20:20

useEffects

2020-05-26 09:09:43

Linux 系統(tǒng)調(diào)用操作系統(tǒng)

2023-09-22 07:46:22

CPU溫度筆記本

2021-04-30 13:32:17

TCP三次握手網(wǎng)絡(luò)協(xié)議

2021-07-26 08:08:56

TCPIP網(wǎng)絡(luò)協(xié)議

2020-05-13 12:17:33

RedisC字符C語言

2019-07-16 16:00:31

HTTP時(shí)延服務(wù)

2023-11-29 09:19:00

WebhookURL
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 日韩成人免费视频 | 久久久精品网 | 一区二区精品在线 | 超碰人人人 | 久久高清 | 亚洲国产精品人人爽夜夜爽 | 狠狠做六月爱婷婷综合aⅴ 国产精品视频网 | 欧美精品一区二区蜜桃 | 亚洲欧美日韩在线 | 久久国| 2018天天干天天操 | 中文字幕在线观看一区二区 | 三级免费网 | 亚洲免费一区 | 中文字幕久久精品 | 亚洲精品成人 | 国产精品成av人在线视午夜片 | 99热精品久久| 我想看一级黄色毛片 | 国产成人免费视频 | 99视频免费在线观看 | 亚洲一区二区三区乱码aⅴ 四虎在线视频 | 91av导航| 337p日本欧洲亚洲大胆精蜜臀 | 日本午夜免费福利视频 | 国产欧美视频一区二区 | 成人在线一区二区三区 | 午夜资源 | 午夜天堂精品久久久久 | 综合久| 欧美日韩久久精品 | 91视频中文| 久久久久久亚洲 | 国产日产欧产精品精品推荐蛮挑 | 成人一区二区三区视频 | 一区二区视频 | 一本大道久久a久久精二百 欧洲一区二区三区 | 久久久久久久久久久久久久久久久久久久 | 久久精品16| 在线看日韩 | 精品视频一区二区 |