[Любая версия] Связь базы данных SQLite и сервера

2,505
81
397
Например, если тебе нужно прочитать данные с sql и положить куда-нибудь на сервере, то можно сделать это и сразу в рабочем потоке (не забыть защититься от рейс кондишна). Если после чтения нужно сделать что-то сложное, то можно сохранить результат выполнения потока, и в основном потоке его потом обработать. Пример сложного действия - отправка пакета на клиент. Но с пакетом опять же можно схитрить, но это уже другая история.
 
2,505
81
397
Я же написал, что прям оттуда нельзя (из-за рейс кондишна). Хотя может и можно, если повесить synchronized над твоим sendPacket. Но это такое. Я бы не стал рисковать. Потом могут вывалиться неприятные баги.
 
2,505
81
397
А вообще, я тут призадумался... И понял, что сам косячу.
Использовать один и тот же Connection в разных потоках нельзя. А я делал именно так. Иногда в основном, иногда в рандомном из пула потоков. Ужс. Но можно использовать один Connection из одного и того же обрабатывающего потока. Т.е. завезти отдельный поток, который будет обрабатывать sql запросы, а в основном потоке обрабатывать результат.
 
2,505
81
397
Использовать один и тот же Connection в разных потоках нельзя.
Упоролся и в 100 разных потоках через один Connection начал прибавлять игроку по 100. Результат всегда разный и всегда не 10000. synchronized над ключевыми методами повешен.

Так вот, результат получить же надо через Future#get, а он как раз и блокирует основной поток. Смысл тогда?
Почему блокирует, не пойму? Я добавляю Future в список и потом каждый тик проверяю таски на завершенность и обрабатываю.
 
Сверху