[請益] java多執行緒runnable問題請教
不好意思想請教一個作業問題,對大神來說應該不難,但我在一個地方卡住了。需要實現一個用戶輸入指令,然後運用多執行緒處理背後的運算,回傳用戶訊息。運算邏輯的部分老師已經寫好,不用管他怎麼計算的,用戶也不用真的輸入東西,用 System.out.println的方式呈現就好, 比如說System.out.println(solution.runCommand("start 10456060"));我需要印出Started 10456060,程式碼以及打印結果連結如下,Solution那個類是新加的,功能有實現出來。
https://scalloped-ceres-c7b.notion.site/Thread-a7f5586100724fe2b18ef8d0b6e707ad我的問題是
private void startCalculation(long n) {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
SlowCalculator s = new SlowCalculator(n);
try {
// s.run();
results.put(n, s.getResult());
} finally {
runningCalculations.remove(n);
}
}
});
runningCalculations.put(n, t);
t.start();
}
這個方法,又另外new了一個Runnable(),他才能跑,但在SlowCalculator類裡已經引用Runnable應該不需要再這樣寫才對,但又不會修改,因此上來詢問,感激不盡。
--
Sent from nPTT on my iPhone X
--
再看一下SlowCalculator裡面的run?
你可以問問chat
這邊 new Runnable @Override run 是為了在 s.run 外面再包
別的動作一起跑,就是必要的,跟你的SlowCalculator是不是
Runnable沒什麼關係
要改頂多就是 new Runnable() 換成 new SlowCalculator(n)
SlowCalculator s = new SlowCalculator(n); 刪掉
s.run() 改成 super.run(),邏輯上沒什麼變化一樣是去包
SlowCalculator.run
這是Decorator pattern,跟thread、runnable沒什麼關係
如果你是想把整個pattern改掉,那就想想你要怎樣、在哪去動
results、runningCalculations
java也太難了
原PO可以想成用戶可以同時輸入多個指令(像是批次處理)
或多個用戶可以同時輸入指令,然後等待處理結果
處理過程可以交給別的thread處理,所以看起來會有2層
如果SlowCalculator有實作Runnable本身就是Runnable
如果是問Thread與Runnable的關係,舉例就是在外送平台
點餐(Runnable),但實際上要有人送(Thread)
要考慮執行序執行完才能 getResult()
能跑是因為new了Thread的,不是new Runnable
www.baeldung.com/java-asynchronous-programming
runnable是新增class thread是新增instance 不要搞錯了
非常感謝各位高手解惑 已在runCommand加上isalive判斷
寫出把new runnable跟void run拿掉感覺能跑的版本
49
Re: [討論] 這樣能進入軟體業嗎??: 簡單的幫你review一下 一般而言,面試官很忙的,所以會沒時間去把你的code拿下來build過在安裝 所以如果你覺得寫得很好的話,建議直接放上google play這樣面試官有機會把玩 然後我看code是有一定質量,所以junior的碼農缺基本上是沒啥問題的17
[請益] 有用過多執行緒做工具嗎各位好 是來找想法的 主要是想透過多執行緒做些什麼 並拿來面試 同時也希望是寫些我自己日常會用的20
Re: [問卦] 如何一句話證明自己C++很強有一天被同事叫去問 template<size_t... Ns> void apply_for(std::integer_sequence<size_t, Ns...>) { (apply(Ns),...); }19
[情報] 12代Intel犧牲Ecore小核可獲得AVX512指令剛解禁的第 12 代 Intel Core 處理器,預設上以 P-core 與 E-core 進行混合運算 並且預設上關閉 P-core 的 AVX512 指令,而目前得知 ASUS、ASRock 的 Z690 主機板 可通過 BIOS 來啟用此指令。 只不過,對於一般電腦、遊戲使用下,根本用不到 AVX512 指令 因此經過詢問 Intel 得到以下對於預設關閉 AVX512 指令的說明。14
Re: [心得] 日本行動支付d払い綁玉山U熊5% (新增其他信用卡大家好, 幫忙補充資料給大家參考, 畢竟這是Android[信用卡用戶去日本可以不用一堆拿零錢的少數方法了 玉山Only: 直接輸入卡號,就會進入3D驗證畫面,簡單成功 永豐大戶: 同玉山Only4
Re: [請益] 多型用在哪ㄛ現在ㄉ想法4 沒有多型 只有介面 多型的用例之一 for(auto p_actor : actors) p_actor->act() 對ㄛ來縮 p_actor實際上到底是什麼 並不重要3
Re: [閒聊] ChatGPT是語言模型不是搜尋引擎這個敘述也太強烈了吧? StackOverflow 上面不是只有 code template,重要的是有很多的討論和推論。 而且如果有新的library出來,很多人也會在StackOverflow上討論 關於這個議題,我來分享我最近遇到的案例 最近在工作上寫code遇到一個問題是,我發現,