今天在測試時發現,當多個執行緒同時往networkstream裡寫入不同的命令時,出現問題,描述如下:
1。假設執行緒1要發命令 a 然後伺服器收到a之後返回相應的操作,執行緒2傳送命令b,伺服器收到命令b後返回相應的操作
2.由於在傳送b命令之前沒有考慮,已經寫進networkstream中的命令a是否已經被傳送出去,而直接往networkstream中寫b
此時可能出現一種情況就是,緩衝區中的a還沒有被發出,b就已經寫了進來(只要networkstream中的緩衝區未滿,這種情況是允許的),然後ab一起被發了出去 導致伺服器不知道怎麼處理接收到的命令。
解決方法:
使用lock機制,當a往緩衝區裡寫的時候,要給當前的操作加一把鎖,如:
lock
stream.wirte("a");
thread.sleep(10);
然後延遲10個毫秒,確保a已經被發出去,這樣就可以保證不會發生上述bug。
networkstream temp = new networkstream();
temp = tcpclient.getstream();
temp.write("b");
由此可見乙個tcp連線只對應乙個首發緩衝區,無論建立多少個與之相連的緩衝區,實際上都指向同乙個緩衝區。
開發中遇到的vue問題總結
1.使用axios迴圈呼叫介面,解決批量刪除 移動 建立等的批量操作 let list 迴圈呼叫介面 let result list.map item 使用promise.all方法等待所以非同步任務執行結束 promise.all result then data catch err 2.vue中...
開發中遇到的問題
最後再一次單步除錯中發現 nsurl urlwithstring 返回的nsurl居然為nil。大概找到問題所在了,在網上查了如何解決獲取空的nsurl,大致方法如下 原因 nsurl urlwithstring 這個方法要求傳乙個字串型別的引數,引數如果有中文的話,得到的物件就是空。解決辦法 先把...
開發中遇到的問題
1 element框架 實現 固定寬度 動態寬度 固定寬度 三個中 誰最長總體高度就是誰 固定寬度 實現效果是2 element框架 實現 響應式布局 使用js動態生成width 並渲染 3 hash模式下共用乙個 頻繁切換tab導致出現 非同步問題 使用同乙個axios 引數不一樣 返回的結果不同...