Threads - usando

O JVM alterna a thread (segmento) em execução. Para uma classe se transformar em thread, é necessário implementar a interface Runnable

Classe Runnable

public class Conta implements Runnable {

 private String nome;

 Conta(String anome) {

         nome = anome;

 }

      // o método run é definido na interface Runnable

 public void run() {

         for (int i = 1; i <= 10; i++) {

                 System.out.println(nome + ": " + i);

         }

 }

}

 

Exemplo de uso

Para usar essa classe em threads

Runnable conta1 = new Conta("Junior");

Runnable conta2 = new Conta("Flavio");

Thread t  = new Thread(conta1);

Thread t2 = new Thread(conta2);

t.start();

t2.start();

 

Saída provável

Junior: 1

Flavio: 1

Junior: 2

Flavio: 2

Junior: 3

Flavio: 3

Flavio: 4

Flavio: 5

Flavio: 6

Flavio: 7

Flavio: 8

Flavio: 9

Flavio: 10

Junior: 4

Junior: 5

Junior: 6

Junior: 7

Junior: 8

Junior: 9

Junior: 10

 

Synchronized

 

Se ambas as threads chamarem um método perigoso é necessário fazer este método synchronized

Assim apenas um segmento (thread) vai poder acessar este método por vez.

É como se houvesse uma chave. A primeira thread que acessar o método vai trancar este método até que termine, uma vez terminada ela abre (destranca) o método para demais threads.

 

private synchronized void incrementa() {...}

 

Para sincronizar apenas parte do fonte, ao invés de todo o método use:

 

public void go() {

  doSomething();

  synchronized(this) {      // esta linha é o segredo do gato

      fazAlgoCriticoUnica();

  }

}