InterruptedException não capturada

Eu lanço uma interruptedException na main esperando que ela seja capturada em um bloco catch, mas isso não está acontecendo.

Quando uma thread está executando (não está nos estados de espera nem bloqueado) e o método interrupt é chamado, não é lançada uma InterruptedException? Na documentação, fala que é lançada essa exceção quando no estado bloqueado ou de espera, mas não diz o que ocorre quando a thread está no estado executável.

public class ClasseThread implements Runnable{
	
	public void run()
	{
		try
		{
			imprime();
		}
		
		catch(InterruptedException e)
		{
			System.out.println("Thread interrompida.");
			return;
		}
		
		System.out.println("O método run continuou...");
	}
	
	public void imprime() throws InterruptedException
	{
		int i = 0;
		
		while(!Thread.currentThread().isInterrupted())
		{
			System.out.println(++i);
		}
	}
}
public class ClasseThreadMain {

	public static void main(String[] args) {
	
		Thread thread = new Thread(new ClasseThread());
		thread.start();
		try{
			Thread.sleep(100);
		}catch(InterruptedException e){}
		thread.interrupt();
	}
}

O resultado desse programa são números impressos e a mensagem “O método run continuou…”.

Quando ela está executando não é lançada exceção, é o código dentro da Thread que deve checar esse status interrupted, como você está fazendo (enquanto não é interrompida fica no loop).

Agora se o interrupt() flagrar a thread dormindo ou fazendo outras coisas apontadas na documentação ( wait(), wait(long), or wait(long, int), join(), join(long), join(long, int), sleep(long), or sleep(long, int), enfim, tudo que de alguma forma faz a thread esperar por alguma coisa antes de continuar), então essa espera é interrompida com uma InterruptedException.

Para ver esse comportamento no seu código coloque um sleep razoável no método imprime()

Quando ela está executando não é lançada exceção, é o código dentro da Thread que deve checar esse status interrupted, como você está fazendo (enquanto não é interrompida fica no loop).

Agora se o interrupt() flagrar a thread dormindo ou fazendo outras coisas apontadas na documentação ( wait(), wait(long), or wait(long, int), join(), join(long), join(long, int), sleep(long), or sleep(long, int), enfim, tudo que de alguma forma faz a thread esperar por alguma coisa antes de continuar), então essa espera é interrompida com uma InterruptedException.

Para ver esse comportamento no seu código coloque um sleep razoável no método imprime()

[/quote]

Obrigado!!