我想每隔5秒写一些JSON。我正在使用Jackson来编写JSON,但它似乎阻止了我的TimerTask。如果我不写JSON,TimerTask每隔5秒运行一次,但是当我尝试编写JSON时,它被阻止并且只运行一次。我该如何解决这个问题?
public class MyTimerTask extends TimerTask {
public static void main(String[] args) {
Timer timer = new Timer();
// execute MyTimerTask every 5th second
timer.scheduleAtFixedRate(new MyTimerTask(), 1000L, 5 * 1000L);
}
@Override
public void run() {
System.out.println("timertask");
// Write JSON to System.out
ObjectMapper mapper = new ObjectMapper();
try {
mapper.writeValue(System.out, "Hello");
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
这是我的Timer线程的堆栈转储:
"Timer-0" prio=6 tid=0x02488000 nid=0x10ec in Object.wait() [0x04a6f000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x24577fa8> (a java.util.TaskQueue)
at java.util.TimerThread.mainLoop(Unknown Source)
- locked <0x24577fa8> (a java.util.TaskQueue)
at java.util.TimerThread.run(Unknown Source)
答案 0 :(得分:1)
问题在于你使用System.out,而不是Jackson。
答案 1 :(得分:0)
它被阻止了,还是只是抛出一个你没有捕获的异常,这有效地取消了你的任务?
作为一方不是“printStackTrace()”几乎从来不是一种有用的异常处理形式。要么不捕获异常,要么记录它有意义。只是调用“printStackTrace()”要求隐藏错误。
如果您的任务确实被阻止,那么下一步就是获取挂起程序的堆栈转储。这应该会告诉你阻止代码的原因。