Duvidas sobre Thread!

Ola, sou iniciante em java, mas como todo estudante de Computação nossos limites são levados ao limite.
Ontem mesmo (11/05/05) um professor pediu um trabalhinho basico, que simule o protocolo CSMA/CD. Claro, com controle de erros, detecção de erros, envio e recebimento de menssagens e ruidos… bom quase tudo… ehheh

Então ele deu algumas dicas sobre como fazer o trabalho, e uma delas se referenciava a Threads, como nunca tinha visto isso, corri atras e encontrei um bom material no site…

Mas ainda assim tenho duvidas como:

O que esse método faz:

[quote]17.void join() ? Aguarda outra thread para encerrar;
21.synchronized ? mecanismo que permite ao programador controlar threads, para que as mesmas possam compartilhar a mesma base de dados sem causar conflitos; [/quote]

O método synchronized, me levou a outra duvida, no caso, como programa vai ser um simulador, e claro, terei que simular o meio de tranmissão (os cabos de rede), penso em utilizar um atributo que armazenam dados (ou as informações), e ali diz que tenho que usar o método para diversas threads usarem a mesma base da dados… isso quer dizer que, sem esse comando eu nao posso ler e gravar, com diversas thread, o mesmo atributo???

Por favor me ajudem, e se alguem ja fez algo parecido, favor se manifeste… :grin:

Obrigado.

P.S.: Estou na metado do semestre de Java, ou seja, primeira vez que estou programando em java…[/quote]

o metodo join() espera a Thread terminar…

por ex, se vc tem varias Threads em seu programa, e uma delas precisa esperar que uma Thread especifica termine para depois continuar a executar, dai vc usa o metodo join()…

ai vai um ex pra ficar mais facil:

public class Teste{
 public static void main(String args[]){
  System.out.println("Criando nova Thread...");
  Aux aux = new Aux();
  aux.start();
  try{
   Thread.sleep(3000);
  }
  catch (Exception erro){}
  System.out.println("Chamando metodo join()");
  try{
   aux.join();
  }
  catch (Exception erro){}
  System.out.println("Concluido!");
 }
}
class Aux extends Thread{
 public void run(){
  for (int i = 1; i <= 10; i++){
   System.out.println("Aux: " + i);
   try{
    Thread.sleep(1000);
   }
   catch (Exception erro){}
  }
 }
}

observe que soh sera exibida a mensagem “Concluido!” na tela depois que a Thread Aux terminar de executar…

qnto ao synchronized, nao se trata de um metodo, e sim de um modificador…
duas Threads diferentes nao poderam executar metodos synchronized simultaneamente…

para se declarar um metodo como synchronized basta por a palavra antes do tipo de retorno, ex:

public synchronized void meuMetodo(){
 ...
}

um ex de synchronized:

public class Teste{
 public Teste(){
  Aux aux = new Aux(this);
  aux.start();
  metodo();
 }
 public synchronized void metodo(){
  System.out.println("Entrando em metodo()");
  try{
   Thread.sleep(1000);
  }
  catch (Exception erro){}
  System.out.println("Saindo de metodo()");
 }
 public static void main(String args[]){
  new Teste();
 }
}
class Aux extends Thread{
 private Teste teste;
 public Aux(Teste t){
  teste = t;
 }
 public void run(){
  teste.metodo();
 }
}

a saida sera:

pois o modificador synchronized nao permitira que o metodo metodo() seja executado por duas Thread simultaneamente…

se vc remover o modificador synchronized a saida sera

espero ter ajudado…

:cool: hummmm…

tah, agora entendi, valeu amigo!
Acho que agora estou pronto pra comeca a fazer o meu trabalho… ehhehh :lol:

Um abraço