JavaApns не работает в ThreadPoolExecutor? - PullRequest
0 голосов
/ 14 марта 2012

Чтобы поддержать один ApnsService, я создал ThreadPoolExecutor для хранения потоков для отправки push.Вот код работника:

открытый статический класс PushWorker реализует Runnable {

    private static final Logger log = Logger.getLogger(PushWorker.class);

    private String token;
    private String alert;
    private int badge;
    private String sound;
    private ApnsService service;

    public PushWorker(ApnsService srv, String t, String a, int b, String s){
        token = t;
        alert = a;
        badge = b;
        sound = s;
        service = srv;
    }
    @Override
    public void run() {


        PayloadBuilder payloadBuilder = APNS.newPayload();
        payloadBuilder.sound(sound);
        payloadBuilder.badge(badge);

        payloadBuilder.alertBody(alert);


        String payload = payloadBuilder.build();
                    service.push(token, payload);

    }
}

Когда я создал работника и выполнил его в пуле потоков:

ThreadPoolExecutor pool = новый ThreadPoolExecutor (corePoolSize, MaximumPoolSize, keepAliveTime, TimeUnit.SECONDS, queue);

pool.execute (работник);

программа былазаканчивается в: PayloadBuilder payloadBuilder = APNS.newPayload ();и без каких-либо ошибок или исключений.Но это может работать, если указано ниже:

PushWorker worker = новый PushWorker (служба, токен, предупреждение, значок, ноль);

работник.run ();

Я не знаю, почему поток был прерван в пуле потоков ... У кого-нибудь был такой же вопрос?

1 Ответ

0 голосов
/ 14 марта 2012

Попробуйте использовать

try {
    Future result = pool.submit(worker)
    result.get()

} catch (ExecutionException e) {
    // actual exception in e.getCause()
}

вместо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...