Bonjour,
j'étudie un programme pour simuler par un programme Java le comportement d’un producteur et d’un consommateur qui s’échangent des objets via un compartiment.
le producteur produit et le consommateur prend l'objet que le producteur à produit.
je dois lever une exception quand le consommateur prend 2 fois le même objet dans la classe CubbyHole(compartiment), mais je ne vois pas comment déterminer si il prend 2 fois le même objet.
Merci de votre aide.
Voici le programme qui décrit le comportement du compartiment.
merci de votre aide.Code:public class CubbyHole { private int contents; private boolean available = false; public int get() throws InterruptedException { if (available == false) return -1; available = false; randomSleep(); return contents; } public boolean put(int value) throws InterruptedException { if (available == true) return false; available = true; randomSleep(); contents = value; return true; } public static void randomSleep() { try { Thread.sleep((int)(Math.random() * 10)); } catch (InterruptedException e) { e.printStackTrace(); } } } Programme du consommateur public class Consumer extends Thread { private CubbyHole cubbyhole; public Consumer(CubbyHole c) { cubbyhole = c; } public void run() { setPriority(3); int value = 0; for (int i = 0; i < 10; i++) { int times = -1; do { try { value = cubbyhole.get(); } catch (InterruptedException e) { e.printStackTrace(); } times ++; } while (value == -1); System.out.println("Consommateur\tprend\t" + value + "\t" + times); } } } programme du producteur public class Producer extends Thread { private CubbyHole cubbyhole; public Producer(CubbyHole c) { cubbyhole = c; } public void run() { setPriority(Thread.MIN_PRIORITY); for (int i = 0; i < 10; i++) { int times = 0; try { while (!cubbyhole.put(i)) { times++; } } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("Producteur\ta mis\t" + i + "\t" + times); } } } le main public class ProducerConsumerTest { public static void main(String[] args) { CubbyHole c = new CubbyHole(); Producer p1 = new Producer(c); Consumer c1 = new Consumer(c); System.out.println("Thread actif\tAction\tObjet\tCycles d'attente"); System.out.println( "------------------------------------------------"); p1.start(); c1.start(); } }
-----