[问题] 请问关于多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