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);
}大致代码如此,每从数据库读到一条数据就进行发送,由于考虑到后台支持多线程接收,为提高效率,想把发送也做成多线程。可测试过程中出现了数据重复发送的情况,而且出现没规律。这是什么问题呢??
望各位帮忙~~~
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);
}大致代码如此,每从数据库读到一条数据就进行发送,由于考虑到后台支持多线程接收,为提高效率,想把发送也做成多线程。可测试过程中出现了数据重复发送的情况,而且出现没规律。这是什么问题呢??
望各位帮忙~~~
Socket socket=new Socket("127.0.0.1",8888);
socket.println(msg);
这两行又是在哪?
用的executorservice线程池 只需要继承runnable接口 这里用的Handler继承 用executorservice.execute(new Handler())就可以启用子线程 由executorservice去调用start,我不用关心socket发送代码是在继承了runnable接口的函数里的(例子里是Handler) 就是每个子线程所做的事就是发送socket报文
发送过程并不会耗时很多,可是后台处理需要一定时间,后台可以多线程处理,所以想把发送做成多线程的,曾经测试过1000多条数据单线程后台要处理半个小时,所以想做成多线程加快处理效率。我这里从数据库取数据并没有多线程,是取到以后丢给Handler去处理,取到一个就丢,测试的时候效率是快多了,可是会时不时出现重复数据。
实际程序中的 SQL 是用了 dinstinct 也把所有数据打印出来查了 没有重复的~~~~~~~~~我现在给ResultSet加了个synchronized试一下看 可这样我估计对速度影响不小 估计跟单线程差不多了