以前沒用過在本地執行命令列程式,這次專案中涉及到blast演算法問題,要用到blast演算法本地化命令列指令的呼叫,所以必須得用到runtime,來執行命令列程式,執行這個程式會返回乙個xml檔案,隨後我要對其解析返回結果。然後,每次命令列程式執行完後,去讀其生成的xml檔案,總說找不到,而本地卻已經生成了這個檔案,控制也顯示生成這個檔案成功,剛開始都以為是io讀取問題,因為每次我關掉後,本地生成檔案就會出問題,我就很疑惑,然而在main方法裡就本類的測試也沒有問題,除錯模式下也沒有問題,結果都是正確的,這下就把我蒙了,難道是執行緒衝突,我開始這麼認為,但總認為我的程式應該是單執行緒的,除非blast會另起執行緒,最後經過測試和會析結果終於將問題鎖定在runtime這裡,原來runtime,執行exec時會另起乙個單獨的執行緒執行命令列程式,這樣程式中兩個執行緒導致讀寫錯誤。解決方法是讓當前執行緒在runtime執行緒執行完後再繼續執行,簡單**如下:
runtime r= runtime.getruntime();
process process = r.exec(command);
process.waitfor();
process.waitfor()就是導致當前執行緒等待,也就是當前執行緒一直要等到process表示的程序終止。
濫用執行緒池引發的問題
前不久,由於組內乙個同事濫用執行緒池造成了一起比較嚴重的線上故障。現在記錄一下,防止自己以後犯同樣的錯誤。a介面是用來返回所有型別的光線資料的同步介面。某種特定的光線x3用了乙個執行緒池 執行緒池裡面有兩個執行緒,將乙個任務拆成兩個來同時進行,等兩個執行緒的任務完成後合併資料並返回 來加快光線x3的...
跨執行緒可能引發的崩潰問題
跨執行緒引發的崩潰 1.正常跨執行緒呼叫 a.跨執行緒造成死鎖 b.跨執行緒釋放記憶體 c.多執行緒併發訪問 例如 進入乙個介面時,該介面會同時發起三個非同步請求操作。每個操作在發起資料請求時,都可能會調某一方法進行訪問某一屬性值 d.執行緒本身有問題,呼叫此執行緒也會掛掉。執行本段邏輯均會掛掉 e...
C 多執行緒 倉庫問題引發的故事
假設有這麼個場景,乙個倉庫,裡面有n件貨物,現有六個搬運工 用執行緒模擬 其中2個向倉庫放東西,4個往外搬東西。假設1秒能向裡放2件貨物,同時可向外搬3件貨物 執行緒休眠 現在需要往裡放m件貨物,一旦倉庫有貨就要向外搬,這個東西怎麼設計?這顯然牽扯到執行緒同步的問題。本來,考慮的有點簡單了,只用了乙...