當前位置:編程學習大全網 - 編程語言 - 7.9,在windows處理器調度的過程中,線程的哪些狀態可以轉換到就緒狀態

7.9,在windows處理器調度的過程中,線程的哪些狀態可以轉換到就緒狀態

線程的狀態轉換是線程控制的基礎。線程狀態總的可分為五大狀態:分別是生、死、可運行、運行、等待/阻塞。用壹個圖來描述如下: 1、新狀態:線程對象已經創建,還沒有在其上調用start()方法。 2、可運行狀態:當線程有資格運行,但調度程序還沒有把它選定為運行線程時線程所處的狀態。當start()方法調用時,線程首先進入可運行狀態。在線程運行之後或者從阻塞、等待或睡眠狀態回來後,也返回到可運行狀態。 3、運行狀態:線程調度程序從可運行池中選擇壹個線程作為當前線程時線程所處的狀態。這也是線程進入運行狀態的唯壹壹種方式。 4、等待/阻塞/睡眠狀態:這是線程有資格運行時它所處的狀態。實際上這個三狀態組合為壹種,其***同點是:線程仍舊是活的,但是當前沒有條件運行。換句話說,它是可運行的,但是如果某件事件出現,他可能返回到可運行狀態。 5、死亡態:當線程的run()方法完成時就認為它死去。這個線程對象也許是活的,但是,它已經不是壹個單獨執行的線程。線程壹旦死亡,就不能復生。如果在壹個死去的線程上調用start()方法,會拋出java.lang.IllegalThreadStateException異常。 有關詳細狀態轉換圖可以參看本人的“Java多線程編程總結”中的圖 二、阻止線程執行對於線程的阻止,考慮壹下三個方面,不考慮IO阻塞的情況:睡眠;等待;因為需要壹個對象的鎖定而被阻塞。 1、睡眠Thread.sleep(longmillis)和Thread.sleep(longmillis,intnanos)靜態方法強制當前正在執行的線程休眠(暫停執行),以“減慢線程”。當線程睡眠時,它入睡在某個地方,在蘇醒之前不會返回到可運行狀態。當睡眠時間到期,則返回到可運行狀態。 線程睡眠的原因:線程執行太快,或者需要強制進入下壹輪,因為Java規範不保證合理的輪換。 睡眠的實現:調用靜態方法。 try{ Thread.sleep(123); }catch(InterruptedExceptione){ e.printStackTrace(); } 睡眠的位置:為了讓其他線程有機會執行,可以將Thread.sleep()的調用放線程run()之內。這樣才能保證該線程執行過程中會睡眠。 例如,在前面的例子中,將壹個耗時的操作改為睡眠,以減慢線程的執行。可以這麽寫: publicvoidrun(){ for(inti=0;i<5;i++){//很耗時的操作,用來減慢線程的執行// for(longk=0;k<100000000;k++); try{ Thread.sleep(3); }catch(InterruptedExceptione){ e.printStackTrace(); . } System.out.println(this.getName()+":"+i); } }

  • 上一篇:計算機及格是多少分
  • 下一篇:UG後處理 如何在每段開頭顯示每把刀加工深度
  • copyright 2024編程學習大全網