91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

啟動一個最簡單的Java main程序時有多少個線程被創建

發布時間:2021-06-23 14:45:54 來源:億速云 閱讀:207 作者:chen 欄目:大數據

這篇文章主要講解了“啟動一個最簡單的Java main程序時有多少個線程被創建”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“啟動一個最簡單的Java main程序時有多少個線程被創建”吧!

 在java中,啟動一個簡單的main程序,并不是只是單單創建了一個main線程而已,JVM會自動創建一些輔助用的線程, 這4個線程,加上,main,所以總共會有5個線程被創建 主要有以下幾個:

Attach ListenerAttach Listener線程是負責接收到外部的命令,而對該命令進行執行的并且吧結果返回給發送者。通常我們會用一些命令去要求jvm給我們一些反 饋信 息,如:java -version、jmap、jstack等等。如果該線程在jvm啟動的時候沒有初始化,那么,則會在用戶第一次執行jvm命令時,得到啟動。

Signal Dispatcher:前面我們提到第一個Attach Listener線程的職責是接收外部jvm命令,當命令接收成功后,會交給signal dispather線程去進行分發到各個不同的模塊處理命令,并且返回處理結果。signal dispather線程也是在第一次接收外部jvm命令時,進行初始化工作。

Finalizer:這個線程也是在main線程之后創建的,其優先級為10,主要用于在垃圾收集前,調用對象的finalize()方法

Reference Handler:VM在創建main線程后就創建Reference Handler線程,其優先級最高,為10,它主要用于處理引用對象本身(軟引用、弱引用、虛引用)的垃圾回收問題

以上這部分內容引用自 http://ifeve.com/jvm-thread/,可以取這個地址查看更多線程的信息

這4個線程,加上,main,所以總共會有5個線程被創建,可以通過這幾行代碼來查看

ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();

ThreadInfo[] threadInfos = threadMXBean.dumpAllThreads(false,false);

for (ThreadInfo info : threadInfos ) {

  System.out.println("[" + info.getThreadId() + "]" + info.getThreadName());

}

  但是,當前活動的線程只有1個,就是main,System.out.println(Thread.activeCount()); 用這條命令返回值是1。這也經常被用作以下場合的判斷

比如,在main線程中創建多個子線程后,如果子線程的耗時比main線程要長,main線程就會再子線程之前結束。假如main線程的結果需要用到子線程的返回值,那么我們通常就在main線程中加上這句代碼:

  System.out.println(Thread.activeCount() >1),

來判斷子線程是否全部運行結束,也就是當前活動線程只有main線程一個。這樣做在windows下是沒錯的,但是!!!

在linux下就不是這樣了,你會發現,即使所有的子線程全部結束,打印當前的活動線程是2!!!而不是1,除了main線程之外,linux下還會有一個Monitor Ctrl-Break 線程存在,這個線程是用來干嘛的呢?

Monitoring Thread Activity With Thread Dumps Thread dumps, or "thread stack traces," reveal information about an application's activity that can help you diagnose problems and better optimize application and JVM performance; for example, thread dumps can show the occurrence of "deadlock" conditions, which can seriously impact application performance. You can create a thread dump by invoking a control break (usually by pressing Ctrl-Break or Ctrl- or SIGQUIT on linux). This section provides information on working with thread dumps. It includes information on these subjects: 1.Lock Information in Thread Dumps 2.Detecting Deadlocks

這是oracle官網的原話。大家可以自行翻譯。 結論:在windows下可以用 Thread.activeCount() >1來判斷子線程是否全部結束,但是linux中應該是 Thread.activeCount() > 2

感謝各位的閱讀,以上就是“啟動一個最簡單的Java main程序時有多少個線程被創建”的內容了,經過本文的學習后,相信大家對啟動一個最簡單的Java main程序時有多少個線程被創建這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

罗田县| 正镶白旗| 上蔡县| 宁津县| 嘉定区| 阿合奇县| 莲花县| 那曲县| 正镶白旗| 安丘市| 包头市| 海阳市| 驻马店市| 噶尔县| 云龙县| 凤山县| 郧西县| 沈阳市| 额敏县| 横山县| 淅川县| 神池县| 荔波县| 新昌县| 博湖县| 黄石市| 军事| 望城县| 当雄县| 永泰县| 太仓市| 蒲江县| 和平区| 合肥市| 江陵县| 芦山县| 乌兰县| 锡林郭勒盟| 姜堰市| 商河县| 太湖县|