В коде у вас работа с таймерами сделана неверно. Кажется, что вы предполагаете, что при записи переменной таймер предыдущий уничтожается - но это работает по другому. Что происходит - это то, что функции intro_start и intro_start2 никогда не останавливаются. Каждый запуск lines порождает еще один "поток" intro_start и intro_start2. Поскольку они меняют глобальные переменные, то перемещение происходит все быстрее и быстрее.
Думаю, что никак. В самой постановке задачи у вас что: клиент заведомо ничего не знает про сервер. Тогда если мы представим параллельно идущий процесс клиента B, который полностью дублирует работу клиента A, то в какой-то момент времени данные с клиента B могут быть переданы серверу вместо клиента A.
HTTPS/SSL как раз и существует для решения подобных задач, в том числе. Просто используйте его - никто ничего не подменит (ну кроме уж случаев с перехватом сертификата, но это уже другой уровень).
Похоже, что для поля ts нет индекса. Поэтому происходит скан всей таблицы при поиске данных. Ну, точнее, поскольку LIMIT, то не всей, а только пока находятся соответвующие записи. По мере их удаления приходится сканировать все дальше и дальше - соответственно время и растет.
Можете попробовать создать индекс по этому полю - должно стать лучше, но это сама по себе долгая операция. Можно попробовать поступить наоборот - создать временную таблицу и перелить в неё только нужные данные за один проход. Что тоже не очень быстро будет, конечно, но зато старую таблицу можно будет удалить целиком (все равно её потом компактизировать скорее всего захочется, что тоже долго).
Java - язык общего назначения, с очень длинной историей, довольно консервативный, со склонностью к enterprise. Как я думаю, какую бы небольшую задачу вы не возьмёте, мир современных языков программирования с большой вероятностью может предложить нечто более специализированное под неё и, соответственно, более удобное.