Exemples du cours
from http://vernier.frederic.free.fr/Teaching/IHM

Montre

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Ex6 implements Runnable{

  public static void main(String[] args) {
    Thread t = new Thread(new Ex6());
    t.start();
  }

  public void run(){
    while (true) {
      try {
        Thread.sleep(1000);
      } catch(InterruptedException e) {
        System.err.println("Interrupted");
      }
      System.out.println(new java.util.Date().toString());
    }
  }
}

Threads en parallèle

public class Ex7 extends Thread {
  private int countDown = 5;
  private static int threadCount = 0;
  private int threadNumber = ++threadCount;

  public Ex7() {
    System.out.println("Making " + threadNumber);
  }

  public void run(){// la méthode à redéfinir : la tâche du thread.
    while(true) {
      System.out.println("Thread "+threadNumber+"("+countDown+")");
      if(--countDown == 0) return;
    }
  }

  public static void main(String[] args) {
    for(int i = 0; i < 5; i++)
      new Ex7().start();//le start lance le thread (run)
    System.out.println("All Threads Started");
  }
}

Interbloquage Producteur/Consommateur

import  java.util.ArrayList;

class Producer extends Thread {
  static final int MAXQUEUE = 5;
  private ArrayList<String> messages = new ArrayList<String>();

  public void run() {
    try {
      while ( true ) {
        putMessage();
        sleep( 1000 );
      }
    } catch( InterruptedException e ) { }
  }

  private synchronized void putMessage() throws InterruptedException {
    while (messages.size() == MAXQUEUE){
     System.out.println("Waiting");
    }
    messages.add(new java.util.Date().toString());
  }

  // Called by Consumer
  public synchronized String getMessage() throws InterruptedException {
    while ( messages.size() == 0 )
      try {
        sleep( 1000 );
      } catch(InterruptedException e){}
    String message = messages.get(0);
    messages.remove(message);
    return message;
    }
}

class Consumer extends Thread {
  Producer producer; // quel est son producteur.

  Consumer(Producer p) { producer = p; }
  public void run() {
    try {
      while ( true ) {
        String message = producer.getMessage();
        System.out.println("Got message: " + message);
        sleep( 2000 ); // il est un peu lent.
      }
    } catch( InterruptedException e ) { }
  }
}

public class Ex8 {
  public static void main(String args[]) {
    Producer producer = new Producer();
    producer.start();
    new Consumer( producer ).start();
  }
}

A vous de coder !

Comptes à rebours