Threads em JAVA

2 respostas
ricardocomp

Olá pessoal estou com uma dúvida aqui
na parte de Threads, será que alguém
pode me dar uma
ajuda? :smiley:

/*
 * ThreadA tem o bloqueio de b
 */
public class ThreadA {

    public static void main(String[] args) {
        ThreadB b = new ThreadB();
        b.start();
        synchronized(b){
            try{
                System.out.println("waiting for b to complete...");
                /*
                 * ThreadA(principal) passa a vez para o thread b???
                 */
                b.wait();
            }
            catch(InterruptedException ex){
                ex.printStackTrace();
            }
            System.out.println("total is: " + b.total);
        }
    }

}

class ThreadB extends Thread{
    int total;
    public void run(){
        synchronized(this){
            for(int i = 0; i < 100; i++){
                total += i;
            }
        }
        /*
         * Thread b notifica o Thread A (Thread principal)???
         */
        notify();
    }
    
}

[]'s.

2 Respostas

S

acho que este topico aqui, responde a sua pergunta

o notify precisa ser no mesmo objeto.

WellingtonRamos

Acho que o notify está ocorrendo no mesmo objeto. Mas talvez o problema seja no wait() que pode estar sendo chamado após o notify() e talvez a ThreadB já tenha morrido.

Coloque um Thread.sleep (1000 ); (1 segundo) dentro do run, antes do bloco síncrono.

Não testei o código. Se o problema não for esse e nem o que o saddam citou, favor, passe mais detalhes (stacktrace, comportamento, etc)

Criado 20 de agosto de 2010
Ultima resposta 20 de ago. de 2010
Respostas 2
Participantes 3