Dinning Philosopher


dinning philosopher:

 

public class DiningPhilosopher

{

public static final int TOTAL_FILSUF = 5;

public static final int TOTAL_SUMPIT = 5;

 

public static void main(String [] args)

{

Thread[] filsuf = new Philosopher[TOTAL_FILSUF];

Semaphore[] sumpit = new Semaphore[TOTAL_SUMPIT];

 

init(filsuf, sumpit);

 

try

{

Thread.sleep(300);

}

catch(InterruptedException e)

{

}

 

stop(filsuf);

}

 

/*

Inisialisasi

*/

public static void init(Thread[] filsuf, Semaphore[] sumpit)

{

for(int loop = 0; loop < sumpit.length; loop++)

{

sumpit[loop] = new Semaphore();

}

 

for(int loop = 0; loop < filsuf.length; loop++)

{

filsuf[loop] = new Philosopher(loop, sumpit[loop], sumpit[(loop + 1) % 5]);

filsuf[loop].start();

}

}

 

/*

Akan menghentikan semua thread philosopher yang berjalan

*/

public static void stop(Thread[] filsuf)

{

for(int loop = 0; loop < filsuf.length; loop++)

{

filsuf[loop].interrupt();

Philosopher temp = (Philosopher)filsuf[loop];

temp.stopRunning();

}

}

}

 

class Philosopher extends Thread

{

int noID;

private  int tingkatKelaparan;

 

private boolean lapar;

private boolean running;

 

Semaphore sumpitKanan;

Semaphore sumpitKiri;

 

Philosopher(int nomor, Semaphore sumpitKanan,

Semaphore sumpitKiri)

{

noID = nomor;

tingkatKelaparan = 2;

 

lapar = false;

running = true;

 

this.sumpitKanan = sumpitKanan;

this.sumpitKiri = sumpitKiri;

}

 

void stopRunning()

{

running = false;

}

 

public void run()

{

while(running)

{

berpikir();

test();

}

}

 

private void berpikir()

{

try

{

System.out.println(“filsuf no ” + noID +

” sedang berpikir.”);

int loop = (int)(10 * Math.random());

 

for(int aa = 0;aa < loop; aa++)

{

tingkatKelaparan++;

 

sleep(35);

 

if(tingkatKelaparan > 8)

{

aa = loop;

}

}

 

if(tingkatKelaparan > 5)

{

lapar = true;

}

}

catch(InterruptedException e)

{

}

}

 

/*

Mencoba untuk mendapatkan sumpit kiri dan kanannya sehingga

dapat makan

*/

private void test()

{

while(lapar)

{

System.out.println(“Filsuf no ” + noID +

” lapar dengan tingkat kelaparan ” +

tingkatKelaparan);

if(!sumpitKanan.sedangDipakai())

{

sumpitKanan.ambil();

System.out.println(“Filsuf no ” + noID +

” mengambil sumpit disebelah kanannya.”);

}

 

if(!sumpitKiri.sedangDipakai())

{

sumpitKanan.ambil();

System.out.println(“Filsuf no ” + noID

+ ” mengambil sumpit disebelah kirinya.”);

makan();

}

else

{

sumpitKanan.letakkan();

System.out.println(“Filsuf no ” + noID +

” meletakkan sumpit yang telah diambil ” +

“kesebelah kanannya.”);

 

try

{

sleep(10);

tingkatKelaparan++;

}

catch(InterruptedException e)

{

}

}

}

}

 

void makan()

{

System.out.println(“Filsuf no ” + noID + ” sedang makan.”);

 

try

{

int loop = (int)(10 * Math.random());

 

for(int aa = 0;aa < loop; aa++)

{

tingkatKelaparan–;

sleep(10);

}

}

catch(InterruptedException e)

{

}

 

selesaiMakan();

 

lapar = false;

}

 

private synchronized void selesaiMakan()

{

tingkatKelaparan = 0;

 

sumpitKanan.letakkan();

System.out.println(“Filsuf no ” + noID +

” meletakkan sumpit disebelah kanannya”);

 

sumpitKiri.letakkan();

System.out.println(“Filsuf no ” + noID +

” meletakkan sumpit disebelah kirinya”);

 

System.out.println(“Filsuf no ” + noID + ” selesai makan.”);

}

}

 

class Semaphore

{

private boolean dipakai;

Semaphore()

{

dipakai = false;

}

 

boolean sedangDipakai()

{

return dipakai;

}

 

synchronized void ambil()

{

if(!dipakai)

{

dipakai = true;

}

}

 

synchronized void letakkan()

{

dipakai = false;

}

}

 

Beli T-Shirt, Raglan dan Kids T-Shirt Original Ocean Seven

  1. T-Shirt, Raglan dan Kids T-Shirt Anime, Manga, Gamers dan Cartoon World (OceanSeven)
  2. T-Shirt, Raglan dan Kids T-Shirt Footbal Series (OceanSeven)
  3. T-Shirt, Raglan dan Kids T-Shirt Music Series (OceanSeven)
  4. T-Shirt, Raglan dan Kids T-Shirt OceanSeven – Custom dan Basic Tees (OceanSeven)
  5. T-Shirt, Raglan dan Kids T-Shirt OceanSeven -Kids Collections (OceanSeven)
  6. T-Shirt, Raglan dan Kids T-Shirt OceanSeven -Signature Serues (OceanSeven)
  7. T-Shirt, Raglan dan Kids T-Shirt  Social Media dan Photography (OceanSeven)
  8. T-Shirt, Raglan dan Kids T-Shirt Sport, Automotive dan Adventure (OceanSeven)
  9. T-Shirt, Raglan dan Kids T-Shirt Superheroes dan Movies (OceanSeven)

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s