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 !
Ecrivez un programme JAVA producteur/consommateur avec
un thread qui écrit entre 3 et 14 caractères au hasard dans une String, avec des pauses allant de 0 à 4 secondes (Uniquement lorsque la String est vide length==0)
un autre thread qui affiche le contenu de cette String à l’écran, (uniquement lorsque la String n'est pas vide), et en la vidant ensuite.
Afficher AUSSI le nb de millisecondes depuis le lancement du thread
long startTime = System.currentTimeMillis();
Comptes à rebours
Ecrivez un programme qui lance des comptes à rebours(CAR)
à partir de 10,15 ou 20 au hasard) (i.e. 10, 9, 8, 7, 6, 5, 4, 3, 2, 1)
dès le début du CAR programme le lancement du CAR suivant dans 5, 10 ou 15s (au hasard) !
décrémente au bout de 1s
chaque CAR affiche son nombre à la console
un CAR à zéro stoppe son cycle de vie (et pas juste d'afficher)