java 板


LINE

最近教授正在教Threading, 班上的好像高中都已經學過了, 教授以超快速的速度帶過 一大堆東西,還好我有一些比較可靠的書本可以幫我 可是有一點, Threading, 書本上教得很模糊 (Just Java 2 6e, Data Structures and Problem Solving Using Java 3e) 我不太確定我這樣寫的對不對, 以下是某些Code: public class Main { public static void main(String[] args) { new ThreadDemo1().start(); System.out.println("Hello from Main!"); System.out.println("Program is now finished"); } } class ThreadDemo1 extends Thread { public void run() { try { sleep(500); } catch (InterruptedException ex) { Logger.getLogger(ThreadDemo1.class.getName()).log(Level.SEVERE, null, ex); } System.out.println("ThreadDemo1 saying howdy!"); } } 我有個問題就是說: 如果跑這個code, 會變成 Hello From Main Program is now finsihed ThreadDemo1 saying Howdy 會變成這樣是因為Thread把Main跟ThreadDemo1各分成一個Thread,然後因為Main的Thread 先跑完,在跑ThreadDemo1的Thread才會這樣嗎? 另一個問題是, 如果我要找一個素數(Prime Number) public class Main { public static void main(String[] args) { for (int i = 0; i<1000; i++) { new ThreadDemo2(i).start(); } } } class ThreadDemo2 extends Thread { int number; ThreadDemo2(int primeTest) { number = primeTest; } public void run() { boolean isPrime = true; for (int i = 2; i <= Math.sqrt(number)&& isPrime; i++) { if (number%1 == 0) { isPrime=false; } } if(isPrime) { System.out.println(number+ " is a prime"); } } } 如果利用這個Code跑的話, 他出來的數字都不是一個一個一個i=1,i=2,i=3下去 請問是因為Thread是分成i=1,i=2,i=3同時在跑的嗎? 如果我有225個processes, 那一次性可以算225個prime number? 如果我用sleep(在Demo 1)用這樣的寫法呢? 最後一個大問題, public class Main { public static void main(String[] args) { new ThreadDemo5(5).start(); new ThreadDemo6(6).start(); } } class Dummy { static Integer stuff = new Integer(0); } class Dummy2 { static Integer stuff = new Integer(0); } class ThreadDemo5 extends Thread { int id; ThreadDemo5(int n) { id = n; } public void run() { for (int i=0; i<500; i++) { synchronized (Dummy2.stuff) { yield(); synchronized (Dummy.stuff) { System.out.print(id); } } } } } class ThreadDemo6 extends Thread { int id; ThreadDemo6(int n) { id = n; } public void run() { for (int i=0; i<500; i++) { synchronized (Dummy2.stuff) { yield(); synchronized (Dummy.stuff) { System.out.print(id); } } } } } Dummy的作用是... synchronized的原意是要只讓一個Thread跑的意思嗎? 可是為什麼跑這段Code的時候會... 變成5555556666666555555666666, 不是應該是555555556666666嗎? yield的作用是把Thread暫停一下讓其他Thread跑, 為什麼如果我把yield拿掉的話 結果都不是持續性的55555555666666666而是55665555566655555666段開的呢? 謝謝大家的幫忙 以下是Code: http://nopaste.csie.org/670f3 --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 173.56.121.140 ※ 編輯: BlackMatrix 來自: 173.56.121.140 (03/07 10:03)
1F:推 DavyBlue:我只能說 不同thread沒有用synchronized所起來的話 03/08 15:04
2F:→ DavyBlue:永遠沒有人知道哪一個thread會先跑 03/08 15:05
3F:→ BlackMatrix:不過我有把Synchronized拿掉可是結果還是差不多 03/09 04:47
4F:→ TonyQ:就算用 synchornized ,還是沒辦法保證哪一個Thread會先跑. 03/09 14:08
5F:→ BlackMatrix:原來如此,難怪我自己又做了一堆例題都沒辦法測誰先跑 03/10 09:33
6F:→ TonyQ:Synchronized 只能保證同一時間只有一個Thread存取. 03/10 10:58







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:e-shopping站內搜尋

TOP