0

我过去每 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);
        }
    }
4

2 回答 2

1

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

 timer.scheduleAtFixedRate(new TimerTask() {
     ....
 }, 0, 3000);
于 2013-03-20T08:37:02.727 回答
0

你应该看看这个链接

您正在使用timer.schedule(TimerTask task, long delay)哪个被安排一次。
对于重复调度,您应该使用timer.schedule(TimerTask task, long delay, long period)

但正如Evgeniy Dorofeev所回答的那样

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

它没有任务执行时间的开销。并且会在下次具体执行period
Whiletimer.schedule(TimerTask t, long d, long period)将包括您的任务执行的时间,并将period在您完成上一个任务后的下一次执行。

于 2013-03-20T08:36:17.473 回答