从数据库读取数据,多线程发送,可是数据会重复。
ResultSet rs=c.executeQuery("SELECT * from table");
while(rs.next()){
executorservice.execute(new Handler(rs.getString(1)));
}
class Handler implements Runnable{
public Handler(String s){
this.msg=s;
}
...
Socket socket=new Socket("127.0.0.1",8888);
socket.println(msg);
}
大致代码如此,每从数据库读到一条数据就进行发送,由于考虑到后台支持多线程接收,为提高效率,想把发送也做成多线程。可测试过程中出现了数据重复发送的情况,而且出现没规律。这是什么问题呢??
望各位帮忙~~~
------解决方案--------------------看不出有什么问题么。 坐等高手解答。
------解决方案--------------------你的thread start在哪?
Socket socket=new Socket("127.0.0.1",8888);
socket.println(msg);
这两行又是在哪?
------解决方案--------------------如果发送过程(方法)耗时很多,可以考虑用多线程发送,否则无意义,因为多线程取数据时需要同步(估计楼主是这里没有同步,所以造成所发送数据重复),造成性能瓶颈(我认为更可能发生在这,发送方法一般都会很快返回)。
------解决方案--------------------数据库是否有重复数据啊
------解决方案--------------------效果应该不大,可以debug下ResultSet rs=c.executeQuery("SELECT * from table");,看是否是多次执行了,如何不是异步的,就放在static块中