[回到版面]
回應模式
名 稱
內 文
附加圖檔[] []
  • 可附加圖檔類型:GIF, JPG, JPEG, PNG, WEBM,瀏覽器才能正常附加圖檔
  • 附加圖檔最大上傳資料量為 3072 KB。
  • 當檔案超過寬 125 像素、高 125 像素時會自動縮小尺寸顯示
  • 目前附加圖檔使用量大小: 171013 KB / 500000 KB
  • 回覆時程式碼縮排會被trim消掉,請善用[code][/code]標色或貼到ideone等網站
  • LaTeX記法可以用「$$」或「\( \)」包起來,例如「$\sum_{k=1}^{k=n} k^2 = \frac{n(n+1)(n+2)}{6}$」
  • 投稿時請點擊畫像認證後,再按下 [送出] 按鈕提交。
  • 鬧板、攻擊性發言、煽動性發言請無視(回應者也無視),並使用del或在貓管理部向管理員回報。
  • 新介面尚處於測試階段,如果有任何問題可以向管理員或於程設交流版反映。

檔名:1554131367044.jpg-(20 KB, 600x365)
20 KB
java無名19/04/01(一)23:09:27 ID:.fnEETYkNo.13145
假設我建了一個Class A extends Thread
在Class A裡面Override了 run()

然後在一個main()裡面
A a1=new A();
A a2=new A();
a1.start();
a2.start();
不太懂多執行緒的運作原理 上面的例子是如何運作的?
意思是這個main方法的執行緒跟OS要了2條新的執行緒來同時
執行a1的run()跟a2的run()嗎?
那main方法要完這2條執行緒就結束,剩下a1跟a2的2條執行緒在跑嗎?

另外為什麼如果不用start() 而是在main()裡面執行a1.run()跟a2.run()還是單執行緒? start()內部不就自動呼叫run()
到底差別在哪啊 我被搞得好亂啊
無名19/04/01(一)23:38:04 ID:Vaqx/wfcNo.13146
檔名:1554133084302.jpg-(44 KB, 400x300)
44 KB
>另外為什麼如果不用start()
>而是在main()裡面執行a1.run()跟a2.run()
>還是單執行緒?
也許人家start()裡面處理了你沒注意到的事情啊(像是處理thread)。
說起來你要懂這些幹嘛,只要知道非同步呼叫應從start()跑不就好了?
無名19/04/02(二)01:14:29 ID:Q/Y6zfwsNo.13147
你看起來沒有搞懂執行緒到底是什麼
如果你還是個基礎都沒穩的程設菜鳥
我建議你先不要玩執行緒,這太複雜了
如果你覺得你基礎穩了該挑戰執行緒了,先去搞懂執行緒的大概念再來問程設細節

start會開一條新的執行緒出來,在新執行緒上面執行run
不用start直接run的話就是在你原本的執行緒上執行run

你在main裡面呼叫完兩個start之後,這個程式會有三個執行緒
一個執行a1.run,一個執行a2.run,還有一個執行main呼叫完start之後的程式
三者同時各自進行,互不等待

如果你直接在main呼叫兩個run
那就沒有新增執行緒
而是用一個執行緒依序做完a1.run→a2.run→main後面的程式
無名19/04/02(二)08:09:23 ID:FvrK1//YNo.13148
>>13146
一半是需要 一半是好奇

>>13147
感謝
無名19/04/02(二)20:42:41 ID:wvNn5Cb6No.13156
檔名:1554208961118.png-(59 KB, 800x500)
59 KB
學高階語言就是要練練習看文章,當個理組中的文組。

https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#start()
無名19/04/02(二)23:22:50 ID:wr5z96fgNo.13166
島島..我原PO
這段程式碼有地方看不是很懂
public class NewThread implements Runnable {
String name;
Thread t;

NewThread(String threadname) {
name = threadname;
t = new Thread(this, name);
System.out.println("New thread: " + t);
t.start();
}

這個意思是如果我創建一個NewThread物件
這個NewThread物件會自動再建立一個Thread?
那個Thread(this,name)的this是什麼?
是把這個NewThread物件再丟進去Thread裡面?
這樣自己把自己丟進去自己創造出來的東西好像哪裡怪怪的?
無名19/04/02(二)23:36:50 ID:wvNn5Cb6No.13170
檔名:1554219410206.jpg-(173 KB, 800x473)
173 KB
>>13166
也許是你用錯Runnable了?
無名19/04/02(二)23:45:32 ID:wr5z96fgNo.13171
>>13170
我沒有整段放上來 下面是有run()的 只是我是上面建構子的地方看不懂 所以就沒全部放
無名19/04/02(二)23:52:50 ID:wvNn5Cb6No.13174
檔名:1554220370370.jpg-(73 KB, 600x550)
73 KB
>>13166
>>13170
大概找到你這段奇怪程式哪來的了
https://www.sanfoundry.com/java-questions-answers-mcqs/

基本上this,就是...this(object 不是class了,此時要當他已經實體化)
,只能說多寫就會習慣了。

另外比起這種極端的問題集,建議你還是多看Example學習,多多比較使用方式,找出比較順眼的開發方式比較重要。
https://www.callicoder.com/java-multithreading-thread-and-runnable-tutorial/
無名19/04/03(三)00:02:44 ID:oRWeYXXcNo.13177
>>13174
我原Po 大概我看的範例是從你貼的網站抄的吧
所以那一段真的是把自己塞到自己創建的Thread?
無名19/04/03(三)00:04:07 ID:Rku4lbOcNo.13178
檔名:1554221047915.png-(19 KB, 800x500)
19 KB
>>13177
就處理堆疊阿,建構處理到一半就跑去處理另一個的建構處理。
就是很該死的寫法。
無名19/04/03(三)00:22:49 ID:oRWeYXXcNo.13182
>>13178
是效率差還是可讀性差?
我也沒辦法 上課範例就長這樣 只能想辦法看懂
無名19/04/03(三)00:27:25 ID:Rku4lbOcNo.13184
檔名:1554222445753.png-(33 KB, 400x250)
33 KB
>>13182
【程式要越寫越笨】,
你有辦法寫出讓脫離戰線很久的主管看得懂的程式時,
你就成功了。

PS:主管若是無藥醫的那種建議你轉職比較快。

/**********************/
你身旁沒有主管沒有關係,拿程式碼問你同學說看不看得懂就好。
然後問對方哪個環節閱讀/理解起來有問題,然後想辦法轉換表述方式。
無名19/04/03(三)00:35:30 ID:oRWeYXXcNo.13185
>>13184
我比較想實質理解,而不是會寫=懂
所以問了大概也沒辦法當參考
無名19/04/03(三)00:38:49 ID:Rku4lbOcNo.13186
檔名:1554223129481.png-(21 KB, 800x500)
21 KB
>>13185
高階語言就不是給你這樣學的阿.....
你應該要關注在"行為"本身。

或者建議你不要學JAVA了。
無名19/04/03(三)00:48:48 ID:oRWeYXXcNo.13187
>>13186
行為本身,那不就只是硬去記?
無名19/04/03(三)00:54:34 ID:Rku4lbOcNo.13188
檔名:1554224074959.png-(15 KB, 800x500)
15 KB
>>13187
所以要去練習寫作,關注架構,學習命名風格。
所以>>13147不是說了
>基礎都沒穩的程設菜鳥
>我建議你先不要玩執行緒,這太複雜了
無名19/04/03(三)00:55:09 ID:BZUs0hXkNo.13189
簡單來說,設計者由於某些原因,不希望class NewThread繼承class Thread(可能是因為NewThread要繼承別人,JAVA不允許多重繼承),
所以讓class NewThread實現介面Runnable,然後將自己包入Thread裡面,讓Thread運作時借由Runnable介面轉接到NewThread。
無名19/04/03(三)00:56:56 ID:oRWeYXXcNo.13190
>>13188
不是我想玩 是課程的安排啊....
無名19/04/03(三)00:58:16 ID:BZUs0hXkNo.13191
如果你沒有這需求(NewThread要繼承別人),那自然沒必要這麼搞,讓NewThread繼承Thread就行。
無名19/04/03(三)00:59:16 ID:Rku4lbOcNo.13192
檔名:1554224356986.jpg-(109 KB, 850x850)
109 KB
>>13190
退掉,去運動吧!健康的身體才有健康的心靈。
無名19/04/03(三)01:01:19 ID:bcYnr2VsNo.13193
>>13187
高階語言就是這樣
「我跟你說這行什麼意思,你乖乖記得就好
 不要去管他底層是怎麼執行的,那個你玩不起」

如果你對底層實際原理很有興趣
建議你去學C
不是C++,是正面跟pointer硬幹的純C
既難學又難用、寫不出什麼好看的程式
但如果堅持下去,十年功成之後得到的東西是其他管道取代不來的
無名19/04/03(三)01:03:07 ID:oRWeYXXcNo.13194
>>13192
沒辦法
無名19/04/03(三)01:06:23 ID:oRWeYXXcNo.13195
>>13193
先等我Java學到能混口飯吃,我再考慮去補一些底層的
軟硬知識
無名19/04/03(三)01:07:30 ID:BZUs0hXkNo.13196
>>13194
簡單來說,這段程式的意思就是:
我想要作改良步槍,但我不要直接用原本的步槍改。
所以我在原本的步槍裡面塞進我的改良步槍,按下原本的步槍的板機時用裝置連動到裡面的改良步槍,改良步槍子彈穿過槍管從原本的步槍的槍管射出
無名19/04/03(三)01:09:43 ID:oRWeYXXcNo.13197
>>13191
是沒有必要 因為這範例是拿來觀察Join()的運作
只是寫這樣搞得我連Join都很難看懂


【刪除文章】[]
刪除用密碼: