如何在java中实现多线程计时器任务?

时间:2015-05-24 09:19:29

标签: java multithreading sockets client-server

我要做的工作是在java中模拟停止等待的ARQ。初始设置是

  1. 创建ServerSocket
  2. 对于每个接受的客户端,使用ServerSocket.accept为该客户端创建一个新线程。
  3. 现在,主要是我基本上要做的事情。

    1. 向客户端发送数据包。 (或者向客户提供一些数据)
    2. 等待1s,但如果在此时间内到达确认时间,则会在等待时间到达下一个循环

      List<String> frames = frame.getFrames(Server.getData());
      for(int i=0;i<frames.size();++i)
      {
          String currFrame = frames.get(i);
          writer.println(currFrame); // A printwriter for socket
          writer.flush();
          if(reader.readline()) // for 1 sec
          /** 
              Here is what I want to do. I want to keep reading for input upto 1 sec.
              if No input is found after even after 1 sec. Decrement i and go to the 
              start of the loop
         **/
      
      }
      

      这里的问题是,这个读取器是阻塞代码,直到输入可用为止。但我想要的是,如果1秒钟的读卡器没有找到输入,它就会突破循环。我们必须注意到这段代码在一个单独的线程中。

    3. 那么,这个问题有什么好的解决方案吗? here是完整的代码。

1 个答案:

答案 0 :(得分:1)

你需要setSoTimeut:

    ServerSocket socket = new ServerSocket(somePort);

    Socket incoming = socket.accept();
    incoming.setSoTimeout(1000);