[問題] 請問關於多thread共用session

看板java作者 ( )時間9年前 (2015/03/18 17:02), 9年前編輯推噓1(105)
留言6則, 3人參與, 最新討論串1/1
小弟在公司接了一個前輩寫的code(前輩已經離職) 功能是利用Jsmpp的libery實做發送SMS功能 因為對Thread算是半懂,沒有真正去深究過 就這樣接著之前的寫法用下去 最近發生一些問題,不過因為沒有找到真的可以確定的答案,上來求助各位高手 問題:在程式執行的過程,發現這個程式會建立多個session連線 程式內容: 宣告全域變數 SMPPSession smppSession = new SMPPSession(); private ArrayList<msgStatus> qryMsg= new ArrayList<msgStatus>(); 使用 ExecutorService 對每個簡訊建立發送的thread,放至pool中,去發送並且將資料寫入List 在內部寫 private class extends Thread 去追蹤發出去的簡訊之後的狀態 整個結構是 public class A { SMPPSession smppSession = new SMPPSession(); private ArrayList<msgStatus> qryMsg= new ArrayList<msgStatus>(); public static void main(){ Thread t = new t.start for(......){ execService.execute(newSendTask(tmm)); } } public class B extends Thread{ 查詢在qryMsg中簡訊的狀態 } private Runnable newSendTask(final msgStatus msg) { return new Runnable() {.....發送簡訊並且將資料放至qryMsg中}; } } 所有的過程都使用同樣smppsession 不清楚為什麼會有多個連線的問題 有在猜是不是在new SendTask的時候,會自己獨立一個連線的session? 這樣的話是不是把smppsession設為 static靜態變數就可以避免多個session連線的問題? 麻煩各位版友解惑 非常感謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 211.22.92.217 ※ 文章網址: https://www.ptt.cc/bbs/java/M.1426669368.A.F01.html

03/18 19:25, , 1F
我想... 如果你只是把 class A 的 smppsession 設為
03/18 19:25, 1F

03/18 19:25, , 2F
static 靜態變數,應該是不能解決問題的。
03/18 19:25, 2F

03/18 21:49, , 3F
所以症狀是會重複發送簡訊嗎還?你看起來是多條Thread共
03/18 21:49, 3F

03/18 21:49, , 4F
用ArrayList 他不是Thread-safe
03/18 21:49, 4F
Array List 共用沒錯,運行中一放一取的過程沒有問題 現在是發送與查詢會與一個服務中心作連線 這個連線預計是設定成全部都透過smppSession 去進行 如果是這樣應該是會只有1個Session的連接 可是最近發現到的是說,會建立2個,甚至3個以上連線 因為服務中心的連線數有限制,超過連線數會因為無法連線 產生無法送出的Exception 這是不太正常的狀況 ※ 編輯: sthermit (211.22.92.217), 03/19/2015 09:42:20

03/19 09:47, , 5F
如果你確定每次用smppSession都是用同一個物件
03/19 09:47, 5F

03/19 09:48, , 6F
那就是SMPPSession裡面其實會自己生多個connection了吧
03/19 09:48, 6F
文章代碼(AID): #1L2Jyuy1 (java)