如何为PrintWriter设置TimerTask?

时间:2013-03-20 08:29:02

标签: java timertask

我每3秒钟使用TimerTask发送消息,但只发送一次。

 public static void main(String[] args) throws IOException {
            soc = new Socket("localhost", 12345);
            out = new PrintWriter(soc.getOutputStream(), true);
            send();
        }
        private static void send() {
            Timer timer = new Timer();
            timer.schedule(new TimerTask() {
                @Override
                public void run() {
                    out.println("fetewtewwefwfewf egreg \n");
                    out.flush();
                    InputStream is;
                    try {
                        is = soc.getInputStream();
                        DataInputStream dis = new DataInputStream(is);
                        while (!soc.isClosed()) {
                            long value = dis.readLong();
                            System.out.println(value);
                        }
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }, 3000);
        }
    }

2 个答案:

答案 0 :(得分:1)

您正在使用timer.schedule(TimerTask task, long delay),它仅为一次执行安排任务。对于重复执行,请使用timer.scheduleAtFixedRate(TimerTask task, long delay, long period),即将代码更改为

 timer.scheduleAtFixedRate(new TimerTask() {
     ....
 }, 0, 3000);

答案 1 :(得分:0)

您应该查看 this link

您使用的timer.schedule(TimerTask task, long delay)已安排一次 对于重复计划,您应该使用timer.schedule(TimerTask task, long delay, long period)

但正如Evgeniy Dorofeev

所回答的那样
timer.scheduleAtFixedRate(new TimerTask(){}, 0, 3000);

它没有任务执行时间的开销。并将在下次特定period执行 虽然timer.schedule(TimerTask t, long d, long period)将包含执行任务的时间,但下次完成上一个任务后将在period处执行。