Написание JSON с использованием Jackson блокирует мой TimerTask - PullRequest
2 голосов
/ 02 мая 2011

Я хотел бы написать немного JSON каждую 5-ю секунду. Я использую Джексона для написания 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-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 ]

1 голос
/ 04 мая 2011

Проблема в том, что вы используете System.out, а не Джексона.

0 голосов
/ 02 мая 2011

заблокировано или просто выдает исключение, которое вы не перехватываете, что фактически отменяет вашу задачу?

, поскольку сторона, отличная от printStackTrace (), почти никогда не является полезной формой исключения.обработки.либо не поймайте исключение, либо зарегистрируйте его осмысленно.просто вызов printStackTrace () просит скрыть ошибки.

если ваша задача действительно заблокирована, то следующий шаг - получить дамп стека зависшей программы.это должно показать вам, что вызывает код для блокировки.

...