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

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

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

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

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

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

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

圖片

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

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

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

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

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

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

圖片

在Java中,線程的運行狀態被定義成了5個枚舉值,分別是:

(1)新建(NEW),線程已經創建好了,但是還沒有調用start()方法啟動。

(2)就緒(RUNNABLE),這個狀態下的線程可能正在運行,也可能還在就緒隊列里面,等待系統分配CPU資源。

在操作系統中,會額外區分一種狀態叫做RUNNING,但是從 Java API 的角度,并不能表示出來。

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

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

(5)計時等待(TIMED_WAIT),它和WAITING狀態是一樣的,只是多了一個超時條件觸發機制。

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

在Java API 中,影響線程運行狀態的因素,如圖所示:

圖片

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

因此,為了避免這個問題出現,Java會先去判斷當前線程的運行狀態。

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

責任編輯:武曉燕 來源: Tom彈架構
相關推薦

2020-05-12 08:56:16

Java 線程開發

2022-02-15 07:03:04

start 源碼run線程

2009-08-26 16:58:12

調用C# Thread

2020-12-30 10:04:46

userMapper接口

2020-05-29 09:34:28

httphttps網絡協議

2020-12-15 07:36:12

線程Start Run

2024-10-16 08:38:37

TCP編號信息

2022-12-06 08:26:16

SpringAOPthis調用方法

2023-12-08 08:40:16

函數

2022-01-28 00:00:42

高并發線程順序

2024-11-21 10:38:10

2023-02-01 08:11:40

系統調用函數

2022-11-07 10:20:20

useEffects

2020-05-26 09:09:43

Linux 系統調用操作系統

2023-09-22 07:46:22

CPU溫度筆記本

2021-04-30 13:32:17

TCP三次握手網絡協議

2021-07-26 08:08:56

TCPIP網絡協議

2020-05-13 12:17:33

RedisC字符C語言

2019-07-16 16:00:31

HTTP時延服務

2023-11-29 09:19:00

WebhookURL
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久com| 欧美精品一区二区三区蜜桃视频 | 宅男噜噜噜66一区二区 | 麻豆精品国产91久久久久久 | 欧美精品一区三区 | 亚洲欧美日韩精品久久亚洲区 | 久久激情五月丁香伊人 | 国产精品美女www | 国产精品国产三级国产aⅴ中文 | 久久不射电影网 | 色综合久 | 国产一区2区 | 黄色在线免费看 | 一区二区视频 | 亚洲 欧美 精品 | 日本不卡免费新一二三区 | 国产亚洲一区二区精品 | 国产一级在线 | 在线一区二区三区 | 免费精品一区 | 福利视频网站 | 国产精品视频免费看 | 亚洲精品视频一区二区三区 | 毛片视频免费观看 | 国产一二三视频在线观看 | 99久久精品国产麻豆演员表 | 亚洲免费网 | 激情一区二区三区 | 久久久青草婷婷精品综合日韩 | 免费久久精品 | 国产在线一区二区三区 | 亚洲一区二区在线视频 | 午夜免费观看体验区 | 久久男人 | 久久精品国产99国产 | 免费看国产片在线观看 | 黄色网址大全在线观看 | 日本高清不卡视频 | 亚洲久久一区 | 色欧美综合 | 四色成人av永久网址 |