Threads, alguem?

5 respostas
G

Pessoal… como muitos sabem Threads eh um negocio meio dificil de entrar na cabeca… parece que estou entendo bem mais que antes, mas essa ai me deixou doido. porque gera uma execao??

class Chicks{
	synchronized void yack(long id){
		for(int x = 1; x < 3; x++){
			System.out.print(id + " ");
			Thread.yield();
		}
	}
}

public class ChicksYack implements Runnable{
	Chicks c;
	public static void main(String[] ars){
		new ChicksYack().go();
	}
	void go(){
		c = new Chicks();
		new Thread(new ChicksYack()).start();
		new Thread(new ChicksYack()).start();
	}
	public void run(){
		c.yack(Thread.currentThread().getId());
	}
}

5 Respostas

gustavobs

porque ele dá NullPointer na referencia c… em c.yack()

Este programa rodaria caso c fosse static…

apesar de criar um objeto c = new … (); //este objeto não é utilizado

Perceba que na criação das Threads é utilizada novos objetos, portanto o c = null.

e quando se tenta acessar método de uma variaavel null ? NullPointerException.

J

Só completando o que já foi dito, para funcionar, deveria ser algo assim:

void go(){
   c = new Chicks();
   new Thread(this).start();
   new Thread(this).start();
}

ou

public class ChicksYack implements Runnable{
   Chicks c;

   public ChicksYack() {
      c = new Chicks();
   }

   public static void main(String[] ars){
      new ChicksYack().go();
   }

   void go(){
      new Thread(new ChicksYack()).start();
      new Thread(new ChicksYack()).start();
   }
   
   public void run(){
      c.yack(Thread.currentThread().getId());
   }
}
Fernando_Generoso_da

Ou seja, o problema não é de Threads…ela é apenas um pano de fundo, para confundir a cabeça do cidadão… :lol: :lol: :lol:

gustavobs

Normal, né? 8)

taaqui
class Chicks{  
     synchronized void yack(long id){  
         for(int x = 1; x < 3; x++){  
             System.out.print(id + " ");  
             Thread.yield();  
         }  
     }  
 }  
   
 public class ChicksYack implements Runnable{  
     static Chicks c;   //É so bota como estático que roda na sussa, iria imprimir 8 8 9 9, se não tivesse lançado essa Excepetion acertaríamos com a resposta C. e E. do livro.
     public static void main(String[] ars){  
         new ChicksYack().go();  
     }  
     void go(){  
         c = new Chicks();  
         new Thread(new ChicksYack()).start();  
         new Thread(new ChicksYack()).start();  
     }  
     public void run(){  
         c.yack(Thread.currentThread().getId());  
     }  
 }
Criado 26 de janeiro de 2009
Ultima resposta 27 de jan. de 2009
Respostas 5
Participantes 5