作者sthermit ( )
看板java
标题[问题] 请问关於多thread共用session
时间Wed Mar 18 17:02:45 2015
小弟在公司接了一个前辈写的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://webptt.com/cn.aspx?n=bbs/java/M.1426669368.A.F01.html
1F:→ cyclone350: 我想... 如果你只是把 class A 的 smppsession 设为 03/18 19:25
2F:→ cyclone350: static 静态变数,应该是不能解决问题的。 03/18 19:25
3F:推 haha02: 所以症状是会重复发送简讯吗还?你看起来是多条Thread共 03/18 21:49
4F:→ haha02: 用ArrayList 他不是Thread-safe 03/18 21:49
Array List 共用没错,运行中一放一取的过程没有问题
现在是发送与查询会与一个服务中心作连线
这个连线预计是设定成全部都透过smppSession 去进行
如果是这样应该是会只有1个Session的连接
可是最近发现到的是说,会建立2个,甚至3个以上连线
因为服务中心的连线数有限制,超过连线数会因为无法连线
产生无法送出的Exception
这是不太正常的状况
※ 编辑: sthermit (211.22.92.217), 03/19/2015 09:42:20
5F:→ ssccg: 如果你确定每次用smppSession都是用同一个物件 03/19 09:47
6F:→ ssccg: 那就是SMPPSession里面其实会自己生多个connection了吧 03/19 09:48