Closed sleepytomcat closed 7 years ago
Не поверите, в данный момент дописал уже 90% новой версии библиотеки. Проблема работы с потоками и сохранением быстроты работы была основной.
Полноценно добавлена работа с java.util.concurrent
пакетом, работа с библиотекой теперь полностью потокобезопасна, сейчас провожу рефакторинг.
На конкретике: ранее были проблемы с утечками памяти, создавалось много лишних потоков, особенно, как раз, при обработке новых сообщений.
Сейчас вместо потоконебезопасных List
и ArrayList
используется полностью потокобезопасный CopyOnWriteArrayList
.
Теперь задержек при обработке событий при лонгполлинге не будет абсолютно, и в то же время утечек памяти тоже!
Помимо фикса крупных багов, также пофикшено множество мелочей и добавлено ещё немного полезного функционала.
Спасибо!
Обновил библиотеку, поправлены все замеченные баги, производительность улучшена в разы, добавлен некоторый новый функционал. Вся нужная информация есть в javadoc, а документацию тут обновлю попозже.
Объект queue используется из потока UpdatesHandler (в методе run) и из основного потока (посредством вызова UpdatesHandler.handleCommands(..) ).
https://github.com/petersamokhin/vk-bot-java-sdk/blob/2f38387ce4668f537df3fefcafc4dda7993a0b69/src/main/java/com/petersamokhin/bots/sdk/longpoll/UpdatesHandler.java#L40
https://github.com/petersamokhin/vk-bot-java-sdk/blob/2f38387ce4668f537df3fefcafc4dda7993a0b69/src/main/java/com/petersamokhin/bots/sdk/longpoll/UpdatesHandler.java#L49
При этом сласс Queue сам по себе не является синхронизированным, а данные в нем хранятся в ArrayList<>, который так же не является потокобезопасным. https://github.com/petersamokhin/vk-bot-java-sdk/blob/2f38387ce4668f537df3fefcafc4dda7993a0b69/src/main/java/com/petersamokhin/bots/sdk/longpoll/Queue.java#L16
Таким образом во время работы программы велика вероятность разрушения данных.