Java

Saturday, April 01, 2006

 

Thread[2]

O método não-estático t.join(Thread x), onde t é uma instância de Thread, faz com que a execução de t seja dependente do término da execução de x. Caso t esteja ativa, ela deixa este estado e fica inativa até que x morra, quanto, então, t voltará ao estado de executável. O método estático t.yield() faz com que t deixe de sera ativa e volte para o estado de executável caso haja outra thread com prioridade igual a ela no pool de threads. Não há garantia de que o escalonador não vá escolher t novamente para ser ativa.

Para garantir que o método de um objeto seja acessado por uma única thread de cada vez, colocamos a palavra synchronized em sua assinatura:

private synchronized void mudaEstado(){...}

Também é possível sincronizar apenas um trecho de código, ao invés do método inteiro, como no exemplo a seguir:

public class ThreadABC extends Thread{

private StringBuffer buffer;

public ThreadABC(StringBuffer sb){
synchronized(this){
buffer=sb;
}
}

public void run(){
for (int i=0; i<100; i++){
System.out.print(buffer.toString());
}
buffer.setCharAt(0,(char)(buffer.charAt(0)+1));

}

public static void main(String args []){
StringBuffer buffer = new StringBuffer("A");
Thread t1 = new ThreadABC(buffer);
Thread t2 = new ThreadABC(buffer);
Thread t3 = new ThreadABC(buffer);
t1.start();
t2.start();
t3.start();
}
}

Comments: Post a Comment



<< Home

Archives

March 2006   April 2006   May 2006   July 2006   August 2006  

This page is powered by Blogger. Isn't yours?