Многопоточность Java ScheduledThreadPool останавливается через некоторое время - PullRequest
1 голос
/ 28 мая 2011

Я занимаюсь разработкой приложения J2SE, которое синхронизирует информацию GPS о 184 автомобилях, хранящихся в четырех базах данных на разных серверах. Для каждой машины я создаю тему и сохраняю ее в ScheduledThreadPool

    ScheduledExecutorService executor = Executors.newScheduledThreadPool(20);

    for (int i = 0; i < cars.size(); i++) {
        Car vec_temp = cars.get(i);
        SyncThread carThread = new SyncThread(q, vec_temp, reintentos);
        long sleep = carThread.calculateVehicleDelay();
        executor.scheduleAtFixedRate(hilo, 0, sleep, MILLISECONDS);
    }

Информация о широте и долготе извлекается SocketServer в XML-данных, поэтому внутри класса SyncThread I создается экземпляр Socket, запрашивается информация и закрывается это соединение, и выполняется это каждые 15 минут ...

Приложение начинает работать отлично по какой-то причине, иногда перестает работать без исключений ...

Баночка работает как служба Windows.

Ответы [ 2 ]

3 голосов
/ 28 мая 2011

Согласно API ,

При любом выполнении задания встречает исключение, последующее казни подавлены.

При этом было бы неплохо, если бы вы разместили код внутри SyncThread, иначе вам будет почти невозможно помочь. Кроме того, что такое hilo? Почему вы планируете выполнение hilo, а не carThread?

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

Попробуйте установить блок try-catch в вашей реализации Runnable. Идея состоит в том, чтобы исключить любые исключения, которые будут выброшены исполнителю. В идеале, если вы могли бы зарегистрировать этот инцидент в своем блоке перехвата и избежать его выброса, ваше приложение должно работать как положено, и вы сможете определить, что произошло потом.

...