Просто не имеет смысла делать нити - самое медленное здесь, это отрисовка, а её прийдёться синхронизировать с основным потоком плюс заморачиваться с одновременным доступом к данным (надо же в каждой нити будет знать координаты остальных окружностей).. А чтобы окно не замораживалось просто делать это всё по таймеру или в OnIdle приложения. Так что потоки это, согласись, чуток неуместно в данном случае
Максимум имело бы смысл ещё создать один отдельный поток для отрисовки, но для такой задачи это как стрелять из пушки по воробьям..