Gargo, I have review your code and have couple of suggestion. Please correct me if I went wrong somewhere.

1. updateGameState(); is already on the thread and hence inside the loop, so there is no point for infinite for loop in it definition (I am talking about the infinite for loop inside the updateGameState();)

2. Your code inside the outer run() seems to be much complicated, I would recommend you to share that what exactly you are trying to do?