Точное решение зависит от точных деталей того, что вы должны сделать, и от того, нужно ли вам обновлять графический интерфейс.
Из того, что я прочитал, я могу предложить вам реализовать своего рода игровой цикл.Поскольку я понимаю, вы захотите смоделировать трафик и представить его пользователю.Тогда такой игровой цикл будет, на каждой своей итерации, сначала выполнять все вычисления и обновлять ваши объекты, наконец отображая новое состояние на экране.Это непростая задача, и я боюсь, что вам следует ознакомиться с параллелизмом и синхронизацией кода в Java.
public void run()
{
long startTime = System.currentTimeMillis();
long currTime = startTime;
isRunning = true;
while(isRunning)
{
long elapsedTime = System.currentTimeMillis() - currTime;
currTime += elapsedTime;
update(elapsedTime);
gameRender();
paintScreen();
try
{
Thread.sleep(1000);
}catch(InterruptedException ex)
{
Logger.getLogger(GamePlayPanel.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
В вашем классе будет скелет, подобный приведенному выше, который реализует Runnable, затем высоздайте поток, задав ему свой класс в качестве параметра, и, наконец, вы его запустите.
Более подробную информацию о создании игр можно найти http://www.brackeen.com/ парень опубликовал фантастическую книгу об играх на Java, настоятельно рекомендуется.
EDIT1: из кода, который я наблюдаю, вы прекрасно создаете поток, но вы должны запустить его, используя метод запуска не запущенного потока.---> почему это объясняет @ Брэд.
Удачи, Боро.