Modul D: Deadlock dalam Java dan Solusi Terkait

  Deadlock dalam Java dan Solusi Terkait

 

disusun untuk memenuhi

tugas mata kuliah Sistem Operasi

 

 

Oleh:

ALFI ZAMRIZA

2208107010080



 

 

 SEMESTER 3

JURUSAN INFORMATIKA

FAKULTAS METEMATIKA DAN ILMU PENGETAHUAN ALAM

UNIVERSITAS SYIAH KUALA

DARUSSALAM, BANDA ACEH

2023


Soal:

Deadlock in Java
  •  TestDeadlockExample1.java
  •  DeadlockSolved.java
  •  ProducerConsumerTest.Java

Penyelesaian:

1. TestDeadlockExample1.java
Code:
public class TestDeadlockExample1 {
  public static void main(String[] args) {
    final String resource1 = "ratan jaiswal";
    final String resource2 = "vimal jaiswal";
    // t1 tries to lock resource1 then resource2
    Thread t1 = new Thread() {
      public void run() {
        synchronized (resource1) {
          System.out.println("Thread 1: locked resource 1");

          try {
            Thread.sleep(100);
          } catch (Exception e) {
          }

          synchronized (resource2) {
            System.out.println("Thread 1: locked resource 2");
          }
        }
      }
    };

    // t2 tries to lock resource2 then resource1
    Thread t2 = new Thread() {
      public void run() {
        synchronized (resource2) {
          System.out.println("Thread 2: locked resource 2");

          try {
            Thread.sleep(100);
          } catch (Exception e) {
          }

          synchronized (resource1) {
            System.out.println("Thread 2: locked resource 1");
          }
        }
      }
    };

    t1.start();
    t2.start();
  }
}

Output:
Thread 1: locked resource 1
Thread 2: locked resource 2

Kode tersebut adalah contoh deadlock yang terjadi ketika dua thread berusaha mengunci sumber daya yang saling bergantung. Dalam contoh ini, ada dua sumber daya: `resource1` dan `resource2`. Thread t1 mencoba mengunci `resource1` terlebih dahulu, sementara thread t2 mencoba mengunci `resource2` terlebih dahulu. Kedua thread kemudian mencoba mengunci sumber daya yang tersisa. Namun, karena kedua thread saling menunggu satu sama lain untuk melepaskan sumber daya yang mereka kunci, deadlock terjadi, dan program akan terjebak dalam keadaan yang tidak dapat dilanjutkan.

2. DeadlockSolved.java
Code:
public class DeadlockSolved {

    public static void main(String ar[]) {
        DeadlockSolved test = new DeadlockSolved();

        final resource1 a = test.new resource1();
        final resource2 b = test.new resource2();

        // Thread-1
        Runnable b1 = new Runnable() {
            public void run() {
                synchronized (b) {
                    try {
                        /* Adding delay so that both threads can start trying to lock resources */
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    // Thread-1 have resource1 but need resource2 also
                    synchronized (a) {
                        System.out.println("In block 1");
                    }
                }
            }
        };

        // Thread-2
        Runnable b2 = new Runnable() {
            public void run() {
                synchronized (b) {
                    // Thread-2 have resource2 but need resource1 also
                    synchronized (a) {
                        System.out.println("In block 2");
                    }
                }
            }
        };

        new Thread(b1).start();
        new Thread(b2).start();
    }

    // resource1
    private class resource1 {
        private int i = 10;

        public int getI() {
            return i;
        }

        public void setI(int i) {
            this.i = i;
        }
    }

    // resource2
    private class resource2 {
        private int i = 20;

        public int getI() {
            return i;
        }

        public void setI(int i) {
            this.i = i;
        }
    }
}

Output:
PS E:\KULIAH\SO\Synchronization - lab JIF SO 2023> java DeadlockSolved
In block 1
In block 2

Kode ini adalah contoh penanganan deadlock dalam Java. Dalam contoh ini, dua thread mencoba mengunci dua sumber daya yang berbeda, `resource1` dan `resource2`. Thread pertama (`b1`) mengunci `resource2` dan mencoba mengunci `resource1`, sedangkan thread kedua (`b2`) mengunci `resource1` dan mencoba mengunci `resource2`.

Deadlock adalah situasi di mana kedua thread terjebak karena masing-masing menunggu sumber daya yang telah dikunci oleh yang lain. Penanganan deadlock dalam contoh ini tidak ada, sehingga program mungkin akan berhenti atau terjebak dalam keadaan tidak dapat dilanjutkan.

Solusi untuk menghindari deadlock adalah dengan mengatur urutan penguncian sumber daya yang konsisten di seluruh program, atau menggunakan mekanisme lain seperti `java.util.concurrent` untuk mengelola sumber daya secara lebih aman.




Comments

Popular posts from this blog