使用Jackson编写JSON会阻止我的TimerTask

时间:2011-05-01 20:31:52

标签: java json timer jackson timertask

我想每隔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)

2 个答案:

答案 0 :(得分:1)

问题在于你使用System.out,而不是Jackson。

答案 1 :(得分:0)

它被阻止了,还是只是抛出一个你没有捕获的异常,这有效地取消了你的任务?

作为一方不是“printStackTrace()”几乎从来不是一种有用的异常处理形式。要么不捕获异常,要么记录它有意义。只是调用“printStackTrace()”要求隐藏错误。

如果您的任务确实被阻止,那么下一步就是获取挂起程序的堆栈转储。这应该会告诉你阻止代码的原因。