[問題] 請問關於多thread共用session
小弟在公司接了一個前輩寫的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
03/18 19:25, 1F
→
03/18 19:25, , 2F
03/18 19:25, 2F
推
03/18 21:49, , 3F
03/18 21:49, 3F
→
03/18 21:49, , 4F
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
03/19 09:47, 5F
→
03/19 09:48, , 6F
03/19 09:48, 6F