我每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);
}
}
答案 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)
timer.scheduleAtFixedRate(new TimerTask(){}, 0, 3000);
它没有任务执行时间的开销。并将在下次特定period
执行
虽然timer.schedule(TimerTask t, long d, long period)
将包含执行任务的时间,但下次完成上一个任务后将在period
处执行。