0% ont trouvé ce document utile (0 vote)
42 vues3 pages

Application Thread

Transféré par

medtaieb0000
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
42 vues3 pages

Application Thread

Transféré par

medtaieb0000
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Ecrire un programme Java qui simule la production de produits dans une usine.

Il y a un nombre limité de ressources


disponibles dans cette usine (par exemple 2), et plusieurs travailleurs doivent obtenir l'autorisation pour accéder aux
ressources et faire un assemblage des produits. Chaque assemblage est réalisé par un ouvrier de l’usine et qui reste avec
une durée de 10 secondes.

Un ouvrier est un thread caractérisé par un identificateur (de type int). Son rôle est de réaliser 5 itérations d’assemblage
d’un produit. Ecrire la méthode main permettant de tester ces deux classes.
import java.util.concurrent.Semaphore;

class Factory {
private Semaphore resources;

public Factory(int numResources) {


resources = new Semaphore(numResources, true); // true pour une file d'attente ordonnée
}

public void assembleProduct(int workerId) {


try {
System.out.println("Worker " + workerId + " is waiting for resources.");
resources.acquire(); // Acquérir un permis pour les ressources

System.out.println("Worker " + workerId + " is assembling a product.");


Thread.sleep(10000); // Simuler l'assemblage du produit

System.out.println("Worker " + workerId + " has completed the product.");


resources.release(); // Libérer le permis pour les ressources
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public class Main {
class Worker extends Thread {
public static void main(String[] args) {
private Factory factory;
int numResources = 2; // Nombre de ressources disponibles
private int workerId;

Factory factory = new Factory(numResources);


public Worker(Factory factory, int workerId) {
this.factory = factory;
Worker worker1 = new Worker(factory, 1);
this.workerId = workerId;
Worker worker2 = new Worker(factory, 2);
}
Worker worker3 = new Worker(factory, 3);
public void run() {
for (int i = 1; i <= 5; i++) {
worker1.start();
factory.assembleProduct(workerId);
worker2.start();
}
worker3.start();
}
}
}
}

Vous aimerez peut-être aussi