日期:2014-05-20  浏览次数:20655 次

从数据库读取数据,多线程发送,可是数据会重复。
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块中