Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> синхронизировать потоки 
V
    Опции темы
Samotnik
Дата 2.9.2011, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



Привет народ.
Такая ситуация такая. Есть метод, который посылает сообщения на Apple сервер. Использую javapns для этого. Вот схематично код:
Код

public class DeliveryTask implements Runnable { 
//..... тут много кода
@Override
    public void run() { 
//..... тут много кода
}
sendMessage();
//...
private synchronized void sendMessage() {
PayLoad payload = new PayLoad();
        payload.addCustomAlert("alert");
        payload.addBadge("1");
        payload.addSound("sound");

        PushNotificationManager pushManager = PushNotificationManager.getInstance();
        pushManager.initializeConnection(host, port, new ByteArrayInputStream(certificate),
                password, SSLConnectionHelper.KEYSTORE_TYPE_PKCS12);
        try {
            pushManager.sendNotification(new javapns.data.Device(String.valueOf(id), token, null), payload); //95-я строка тут
        } finally {
            pushManager.stopConnection();
        }
}

Сыпется эксепшен: Судя по всему, он сыпется из-за того, что метод не успевая отработать и закрыть соединение вызывается еще раз и еще и еще и т.д. 
Цитата

26.08.2011 11:33:26 com.my.push.send.DeliveryTask run FEIN: Delivery error for id 516, attempt number 1: Socket is closed
java.net.SocketException: Socket is closed
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.checkEOF(SSLSocketImpl.java:1258)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.checkWrite(SSLSocketImpl.java:1279)
    at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:43)
    at java.io.OutputStream.write(OutputStream.java:58)
    at javapns.back.PushNotificationManager.sendNotification(Unknown Source)
    at com.my.push.send.DeliveryTask.sendMessage(DeliveryTask.java:95) // мой класс
    at com.my.push.send.DeliveryTask.run(DeliveryTask.java:50) // мой класс
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:619)

Метод работал без  synchronized, но после добавления ситуация не изменилась smile
Что можно еще придумать ?  smile 

Это сообщение отредактировал(а) Samotnik - 2.9.2011, 14:10
PM MAIL   Вверх
priam220
Дата 2.9.2011, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 4.6.2010

Репутация: 7
Всего: 8



Сколько экземляров класса DeliveryTask создаете? 



PM MAIL   Вверх
Samotnik
Дата 2.9.2011, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



много  smile 
Код

for (Delivery delivery: deliveries) {
    executorService.submit(new DeliveryTask(delivery));
}

где,  executorService - ExecutorService  smile 
PM MAIL   Вверх
priam220
Дата 2.9.2011, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 4.6.2010

Репутация: 7
Всего: 8



сделай синхронизированный метод статическим  но лучше обойдись синглтоном



Это сообщение отредактировал(а) priam220 - 2.9.2011, 22:12
PM MAIL   Вверх
Samotnik
Дата 3.9.2011, 00:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



Странно, чёйта ЛСД ничего не написал  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0431 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.