У вас самая обычная ситуация для многопоточного программирования - несколько процессов используют 1 разделяемый ресурс - данные. Работает примерно так - при подключении и выполнении запроса к БД процесс получает в кэш определенный набор данных и далее с ним работает. Т.е. у каждого процесса - своя копия. При внесении изменений одним процессом в БД, остальные не знают об этом.
Работа с такими ситуациями описана в любом учебнике/руководстве/курсу по многопоточному программированию.
При перезапуске данные у вас обновляются, потому что происходит перечитывание данных из таблицы. Можете просто заново выполнить запрос - данные перечитаются без перезапуска программы.
Вариантов решений много (разного качества и сложности реализации), нужно выбирать наиболее подходящий в зависимости от технологии работы вашей программы, нагруженности системы и т.д.
Например:
- поток при внесении изменений посылает сигнал всем остальным потокам, чтобы они перечитали данные;
- можно читать не выборку из таблицы, а только 1 запись. Правда эта ситуация повторится, если 2 потока будут редактировать одну и ту же запись одновременно;
- периодически перечитывать данные из таблицы
- держать в базе данных счетчик версии, который изменяется при внесении изменений. В процессах читателях проверять версию и перечитывать данные
и т.д.
В любом случае в трёх словах не опишешь - по многопоточному (параллельному) программированию читают целые курсы.