我建立了一个SOCKET连接,随时要收数据,但每过30秒要回复一个数据包.我可不可以不用TIMERTASK,就用纯程来定时.

解决方案 »

  1.   

    while (true)
    {
       Thread.sleep(time);
       dosomething();
    }
      

  2.   

    不好意思打错了,是线程
    Thread.sleep(time)的话线程就阻塞了,这样就不能及时收数据了
      

  3.   

    定时的时间没有到,本来就应该阻塞啊.你用timer,它也是调用wait来阻塞自己啊.
      

  4.   

    对于socket来说,每一个连接至少要一个线程,这个不说恐怕你也明白.
    但是一般的,对于一个连接来说,也会有多个线程.比如说一个聊天程序,一个线程用来等待接收对方说的话,一个线程负责把你的话发给对方,因为如果对方不说话,你的接收线程肯定是阻塞在那里的,这是你就不能发送你说的话了,你总不能因为对方不说话自己也不说话了吧?
      

  5.   

    那你完全可以用timertask嘛,一个线程在随时接收数据,timertask的线程负责去传送数据包.你自己要自己做一个线程来完成timertask的工作也可以.
      

  6.   

    如果又实现timertask,又实现thread,两个都是run这怎么做?如果在thread里做timertask,timertask也是实现Runnable,我线程里的socket已经关掉了,Timertask会自动清除么?纯程关闭不是最好不要用destory么?这样的话怎么关?
      

  7.   

    lz,一个线程肯定是不行的.
    timertask不会自动清除,你在关闭socket之前,要将timer的任务cancle掉.
    线程关闭不要强制,最好设置一个标志位,然后让线程检查,让它自己关掉自己.
      

  8.   

    客户端有200多个,而且只发信息,没回复,当客户端关闭的时候,怎么试,我用过isClose(),没什么用的.而且每个客户端要两个线程,系统开销太大了吧