亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么run方法不能再搶到cpu繼續第11次輸出日期,而是讓main搶到?

為什么run方法不能再搶到cpu繼續第11次輸出日期,而是讓main搶到?

倚天杖 2022-05-17 15:15:54
import java.util.Date;public class IMP {public static void main(String[] a){T t=new T();Thread mt=new Thread(t);mt.start();try {Thread.sleep(10000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}mt.interrupt();}}class T implements Runnable{public void run() {int i=1;while(true){System.out.println(i+" "+new Date());i++;try {Thread.sleep(1000);} catch (InterruptedException e) {return;}}}}在這個例子中,10秒后,main方法的sleep方法結束,按道理這時main和run的線程都在,為什么run方法不能再搶到cpu繼續第11次輸出日期,而是讓main搶到,執行了interrupt方法?
查看完整描述

3 回答

?
狐的傳說

TA貢獻1804條經驗 獲得超3個贊

看似run方法每次運行需要1秒,實際上光sleep就需要1秒,再加上循環,輸出??赡芤淮芜\行需要1.01秒。
這樣的話,10秒后,run方法仍然在sleep,或許10.1秒的時候才會醒來。
既然run方法在sleep,而mian方法可能在10.01秒時就醒來了,那么就不存在搶的問題了
main方法可能總是先運行。
特別提醒:多線程中各個線程運行時間是不確定的,每次運行可能出現不同結果。
我試驗了一下:main方法如果改為sleep 10008ms的話,就會有11次輸出了,而改為10007ms的話,可能就只有10次輸出。

查看完整回答
反對 回復 2022-05-23
?
子衿沉夜

TA貢獻1828條經驗 獲得超3個贊

main方法是主線程,加上你自己定義的線程,就是說這有2個線程,它們是同等地位的,操作在分配資源的時候是同等對待的,所以你要想達到預期目標,你要在程序中實現好了,不能讓操作系統給你分配,不知道我講的是不是很清楚,希望對你有幫助。

查看完整回答
反對 回復 2022-05-23
?
慕絲7291255

TA貢獻1859條經驗 獲得超6個贊

線程之間,不要期望操作系統怎么作,這是不靠譜的。這些都應該是程序員自己控制的

查看完整回答
反對 回復 2022-05-23
  • 3 回答
  • 0 關注
  • 100 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號