Я хотел бы знать, завершаются ли потоки автоматически при закрытии программы с помощью System.exit (0);
Да. Весь процесс закончится и потоки, которые являются частью этого процесса. Однако, если вы не вызовете System.exit()
, все потоки, не относящиеся к демонам, должны завершиться до завершения процесса.
Как лучше всего убедиться, что у меня нет двух потоков, обращающихся к моей базе данных одновременно
Поскольку это приложение Swing, я предполагаю, что и вы, и администратор не можете получить доступ к приложению одновременно. Однако, чтобы гарантировать, что даже в одном приложении вы не можете запустить более одной операции, влияющей на базу данных, вы должны заблокировать пользовательский интерфейс. Либо отключите кнопки, либо поместите стеклянную панель поверх пользовательского интерфейса. Модальное диалоговое окно прогресса также полезно.
Медленнее ли использовать потоки?
Нет, это не медленнее, если все сделано правильно. Медленная работа займет столько времени, сколько потребуется. Вы не можете исправить это с помощью потоков, но вы можете либо сохранить скорость (воспринимаемую) одинаковой, обеспечивая хороший, не блокирующий пользовательский интерфейс, либо вы можете выполнять более одной медленной операции за раз и, следовательно, увеличить эту воспринимаемую скорость.