Thread - Mistério

meu povo, pq q nessa questão o a linha t1.sleep(10000) está como se estivesse adormecendo o método main e a linha t1.interrupted não tá interrompendo p*** n****?

public class Teste extends Thread {
int y;

Teste(String nome, int i) {
    super(nome);
    this.y = i;
}

public void run() {
    for (int i = 0; ; i++) {

        try {
            sleep(y);
        } catch (InterruptedException e) {}
        System.out.println(getName() + " - " + i);
    }
}

public static void main(String args[]) {
    Teste t1 = new Teste("t1", 500);
    Teste t2 = new Teste("t2", 1000);
    t1.start();


    try {
        t1.sleep(10000); 
        t1.interrupted();
    } catch (InterruptedException e) {}

    t2.start();
    System.out.println("acabou!!");
}

}

Os dois métodos são estáticos. Então as chamadas t1.sleep(10000) e t1.interrupted() surtirão o mesmo efeito que Thread.sleep(10000) e Thread.interrupted(), e estarão agindo sobre o segmento que estiver executando no momento (o main).

O método interrupted() não interrompe nada porque, na verdade, ele retorna um boolean indicando se o segmento em execução foi interrompido ou não. :wink:

e qual método da thread interrompe-a?

O método interrupt()

mas é no código da sua thread que vc vai tratar quando ela vai ser interrompida.
antigamente tinha o STOP que parava a thread de uma vez sem o programador ter chance de fazer alguma coisa…
agora vc usa o interrupt e dentro da sua thread vc precisa fazer:

if (isInterrupted())
{
//return ou faz outra coisa;
}

assim vc trata como que a sua thread vai parar de trabalhar…

valew Samuel, saquei, quer dizer q a Thread não é interrumpida instantaneamente, é isso?

isso… assim vc tem a chance de tratar como ela vai parar…

o stop() foi deprecated

Só para lembrar os métodos que foram deprecated em Threads são:

stop resume suspend tem mais algum outro?