Tugas Praktikum Sistem Operasi II
Source Code “Producer-Consumer Problem” di bawah ini menggunakan 1 buffer item sebagai tempat penyimpanan item-nya. Ubahlah source code tersebut menjadi menggunakan 3 buffer. Sebagai tambahan, Producer & Consumer masing-masing memproduksi dan mengkonsumsi item sebanyak 5 kali. Agar hasilnya lebih bagus, sebaiknya jumlah memproduksi dan mengkonsumsinya diubah menjadi sebanyak 30 kali.
NB: [Lagi] Kepada peserta praktikum yang sudah mengerti diharapkan dapat mengajari teman-temannya yang belum mengerti.
Factory.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | /** * @(#)Factory.java * * * @author * @version 1.00 2010/7/14 */ public class Factory { private String item; public Factory() { } public synchronized void insertItem(String newItem) { while(item!=null) { System.out.print("P >>> Item masih ada. "); System.out.println("Producer menunggu."); try { /* Method wait harus berada dalam blok try catch dimana exception yang ditangkap adalah InterruptedException */ wait(); //Berhenti apabila item masih berisi } catch(InterruptedException ie) { } System.out.print("P >>> Item telah kosong. "); System.out.println("Producer dapat memasukkan item!"); } System.out.println("P >>> Insert : "+newItem); this.item = newItem; notify(); } public synchronized void consumeItem() { while(item==null) { System.out.print("C >>> Item masih kosong. "); System.out.println("Consumer menunggu."); try { /* Method wait harus berada dalam blok try catch dimana exception yang ditangkap adalah InterruptedException */ wait(); //Berhenti apabila item kosong } catch(InterruptedException ie) { } System.out.print("C >>> Item sudah ada."); System.out.println("Consumer dapat mengambil item!"); } System.out.println("C >>> Consume: "+item); String theItem = item; item = null; notify(); } } |
Producer.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | /** * @(#)Producer.java * * * @author * @version 1.00 2010/7/14 */ public class Producer extends Thread { private Factory factory; public Producer(Factory factory) { this.factory = factory; } public void run() { for(int i=1; i<=5; i++) { factory.insertItem("Product "+i); delay((int)(Math.random()*100)); } } public void delay(int millis) { try { Thread.sleep(millis); } catch(InterruptedException ie) { } } } |
Consumer.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | /** * @(#)Consumer.java * * * @author * @version 1.00 2010/7/14 */ public class Consumer extends Thread { private Factory factory; public Consumer(Factory factory) { this.factory = factory; } public void run() { for(int i=0; i<5; i++) { factory.consumeItem(); delay((int)(Math.random()*100)); } } public void delay(int millis) { try { Thread.sleep(millis); } catch(InterruptedException ie) { } } } |
MiniFactorySimulation.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | /** * @(#)MiniFactorySimulation.java * * * @author * @version 1.00 2010/7/14 */ public class MiniFactorySimulation { public static void main (String[] args) { /*Kita membuat satu objek dari class Factory.*/ Factory factory = new Factory(); /* Objek factory yang kita ciptakan diatas kita share ke objek producer & consumer yang akan kita buat di bawah ini. Ingat, objek factory yang ada di objek producer & consumer adalah sama. */ Producer producer = new Producer(factory); Consumer consumer = new Consumer(factory); producer.start(); consumer.start(); } } |
Categories: Praktikum Sistem Operasi