Inicialmente, usar threads para jogos vai te dar muito mais problemas do que vantagens, principalmente por causa da sincronização.
Uma boa abordagem para jogos é usar um loop de jogo (game loop). Este artigo explica a ideia. Neste aqui, há um outro exemplo, em que o tempo entre cada loop é usado na lógica do jogo. Basicamente, a cada volta do laço, você tem uma determinada quantidade de tempo passado (por exemplo, 17 milissegundos). Com isso, você pode realizar ações baseadas no tempo que passou.
Com isso, é possível ter assim:
class Inimigo{
private float tempoDePausa = 0;
private float tempoAtacando = 1;
private boolean atacando = false;
public void update(float deltaTime){
if (tempoAtacando > 0.0f) {
// bla bla bla: aqui, faz o que o ataque precisa
tempoAtacando -= deltaTime;
if (tempoAtacando <= 0.0f){
tempoDePausa = 1; // a partir daqui, o inimigo irá ficar pausado
}
}else{
// aqui ele fica esperando
tempoDePausa -= deltaTime;
if (tempoDePausa <= 0.0f){
tempoAtacando = 1; // a partir daqui, o inimigo irá atacar
}
}
}
}
Daí, na classe que contém o game loop, você faz algo como:
Inimigo orc = new Inimigo();
private void gameLoop(){
float delta = 0;
while (gameRunning){
// resto do código
delta = tempopassado;// delta recebe o tempo passado entre as voltas do laço
orc.update(delta);
// resto do código
}
}
Procure dar uma lida sobre game loop pra entender esse conceito, que é extremamente útil. Muitas bibliotecas e engines inclusive já implementam algo parecido (para o programador não ter que se preocupar com isso).
Abraço.