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

作者: sthermit ( )   2015-03-18 17:02:45
小弟在公司接了一個前輩寫的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連線的問題?
麻煩各位版友解惑
非常感謝
作者: cyclone350 (老子我最神)   2015-03-18 19:25:00
我想... 如果你只是把 class A 的 smppsession 設為static 靜態變數,應該是不能解決問題的。
作者: haha02 (來人!上夾棍!)   2015-03-18 21:49:00
所以症狀是會重複發送簡訊嗎還?你看起來是多條Thread共用ArrayList 他不是Thread-safe
作者: ssccg (23)   2015-03-19 09:47:00
如果你確定每次用smppSession都是用同一個物件那就是SMPPSession裡面其實會自己生多個connection了吧

Links booklink

Contact Us: admin [ a t ] ucptt.com