『壹』 java中,線程有哪五個基本狀態 他們之間如何讓轉化 簡述線程周期
java中,每個線程都需經歷新生、就緒、運行、阻塞和死亡五種狀態,線程從新生到死亡的狀態變化稱為生命周期。
用new運算符和Thread類或其子類建立一個線程對象後,該線程就處於新生狀態。
新生--->就緒:通過調用start()方法
就緒--->運行:處於就緒狀態的線程一旦得到CPU,就進入運行狀態並自動調用自己的run()方法
運行--->阻塞:處於運行狀態的線程,執行sleep()方法,或等待I/O設備資源,讓出CPU並暫時中止自己運行,進入阻塞狀態
阻塞--->就緒:睡眠時間已到,或等待的I/O設備空閑下來,線程便進入就緒狀態,重新到就緒隊列中等待CPU。當再次獲得CPU時,便從原來中止位置開始繼續運行。
運行--->死亡:(1)(正常情況下)線程任務完成
(2)(非正常狀況)線程被強制性的中止,如通過執行stop()或destroy()方法來終止一個線程
『貳』 java 多線程編程 字元串***和###交替輸出
java中線程是不精確的,所以線程直接輸出的話兩個線程執行的先後不能通過程序控制,輸出會隨機出現。
一下提供一種解決方案:
使用延時實現交替輸出
先啟動一個線程輸出***,線程攝制休眠時間(例如:500)。
延時一段時間(例如:500)啟動另外一個線程輸出###,同樣設置休眠時間,與上一個線程休眠時間相同。
此方法主要是利用延時來實現線程交替執行,此方法要求延時時間足夠長(java中毫秒級別無法達到,最好設置為100*X毫秒,實現線程的交替執行)
希望能夠幫到你!
『叄』 JAVA中多線程執行的時間或是順序的問題
關於JAVA中多線程的問題:可以說是時間問題導致了程序運行後出現多種狀況的原因..(現在只談在一個CPU下運行JAVA程序的效果.)因為當START一個新的子線程後,MAIN方法中的程序執行到這時CPU開始切換,但是這種切換是隨即的,跟時間有關,比如你第一次執行可能CPU在MAIN方法中執行到12345停了,然後執行子線程的11 12 13 14 15.。。一段時間後再切換回主線程。所以你看到程序的執行結果不一樣。就是因為CPU切換線程(這時候應該叫進程吧)的時間不一樣.。這雖然有順序切換,但也不是你想的那樣切回主1次再切回子1次這樣來回切..而是0.001秒切一次可以這樣比喻.