Modul B: Contoh Metode yang Disinkronkan Menggunakan Kelas Anonymous dan Contoh Blok yang Disinkronkan

Contoh Metode yang Disinkronkan Menggunakan Kelas Anonymous dan Contoh Blok yang Disinkronkan

 

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:

Example of synchronized method by using annonymous class

  •  TestSynchronization3.java
Example of Synchronized Block
  •  TestSynchronizedBlock1.java
Synchronized Block Example Using Anonymous Class
  • TestSynchronizedBlock2.java

Penyelesaian:

1. TestSynchronization3.java
  • Angka
Code:
//Program of synchronized method by using annonymous class  
class Table {
    synchronized void printTable(int n) {// synchronized method
        for (int i = 1; i <= 5; i++) {
            System.out.println(n * i);
            try {
                Thread.sleep(400);
            } catch (Exception e) {
                System.out.println(e);
            }
        }

    }
}

public class TestSynchronization3 {
    public static void main(String args[]) {
        final Table obj = new Table();// only one object

        Thread t1 = new Thread() {
            public void run() {
                obj.printTable(5);
            }
        };
        Thread t2 = new Thread() {
            public void run() {
                obj.printTable(100);
            }
        };

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

Output:
5
10
15
20
25
100
200
300
400
500


  • Huruf
Code:

class Table {
    synchronized void printTable(char c, int count) {
        for (int i = 0; i < count; i++) {
            System.out.print(c);
            try {
                Thread.sleep(400);
            } catch (Exception e) {
                System.out.println(e);
            }
        }
        System.out.println();
    }
}

public class TestSynchronization3 {
    public static void main(String args[]) {
        final Table obj = new Table();

        Thread t1 = new Thread() {
            public void run() {
                obj.printTable('A', 5);
            }
        };
        Thread t2 = new Thread() {
            public void run() {
                obj.printTable('B', 5);
            }
        };

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


Output:

A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z


Kode ini adalah contoh sinkronisasi dalam Java. Dalam contoh ini, kita memiliki kelas `Table` dengan metode `printTable`, yang mencetak karakter tertentu sejumlah kali. Di dalam metode `printTable`, kita menggunakan kata kunci `synchronized` untuk memastikan bahwa hanya satu thread yang dapat mengaksesnya pada satu waktu. Ini memastikan bahwa karakter 'A' dan 'B' dicetak secara bergantian, bukan bersamaan.

Dalam `main` method, dua thread (`t1` dan `t2`) dibuat untuk mengakses objek `Table` yang sama (`obj`). Kedua thread tersebut menjalankan metode `printTable` dengan karakter yang berbeda dan mencetak karakter tersebut beberapa kali.

2. TestSynchronizedBlock1.java
  • Angka
Code:
class Table  
{      
 void printTable(int n){    
   synchronized(this){//synchronized block    
     for(int i=1;i<=5;i++){    
      System.out.println(n*i);    
      try{    
       Thread.sleep(400);    
      }catch(Exception e){System.out.println(e);}    
     }    
   }    
 }//end of the method    
}    
   
class MyThread1 extends Thread{    
Table t;    
MyThread1(Table t){    
this.t=t;    
}    
public void run(){    
t.printTable(5);    
}    
   
}    
class MyThread2 extends Thread{    
Table t;    
MyThread2(Table t){    
this.t=t;    
}    
public void run(){    
t.printTable(100);    
}    
}    
   
public class TestSynchronizedBlock1{    
public static void main(String args[]){    
Table obj = new Table();//only one object    
MyThread1 t1=new MyThread1(obj);    
MyThread2 t2=new MyThread2(obj);    
t1.start();    
t2.start();    
}    
}    

Output:
5
10
15
20
25
100
200
300
400
500

  • Huruf
Code:
class Table {
  private int currentIndex = 0;
  private char[] alphabet = "abcdefghijklmnopqrstuvwxyz".toCharArray();

  void printTable(int n) {
    synchronized (this) {
      for (int i = 1; i <= 5; i++) {
        System.out.println(alphabet[currentIndex]);
        currentIndex = (currentIndex + 1) % 26;
        try {
          Thread.sleep(400);
        } catch (InterruptedException e) {
          System.out.println(e);
        }
      }
    }
  }
}

class MyThread1 extends Thread {
  Table t;

  MyThread1(Table t) {
    this.t = t;
  }

  public void run() {
    t.printTable(5);
  }
}

class MyThread2 extends Thread {
  Table t;

  MyThread2(Table t) {
    this.t = t;
  }

  public void run() {
    t.printTable(100);
  }
}

public class TestSynchronizedBlock1 {
  public static void main(String args[]) {
    Table obj = new Table();
    MyThread1 t1 = new MyThread1(obj);
    MyThread2 t2 = new MyThread2(obj);
    t1.start();
    t2.start();
  }
}


Output:
a
b
c
d
e
f
g
h
i
j

Kode ini adalah contoh penggunaan sinkronisasi dalam Java untuk memastikan akses yang aman ke sumber daya bersama. Kode ini memiliki tiga kelas utama yaitu Kelas `Table`, Kelas `MyThread1`, Kelas `MyThread2`, dan Kelas `TestSynchronizedBlock1`.

Hasil dari program ini adalah bahwa kedua thread akan mencetak karakter alfabet dari 'a' sampai 'z' sesuai dengan urutan, tetapi mereka akan mencetak karakter tersebut dengan kecepatan yang berbeda, yaitu thread `t1` akan mencetaknya 5 kali, sedangkan thread `t2` akan mencetaknya 100 kali. Keamanan akses ke sumber daya bersama diatur melalui penggunaan `synchronized(this)` dalam metode `printTable`, sehingga hanya satu thread yang bisa menjalankannya pada satu waktu.

3. TestSynchronizedBlock2.java
  • Angka
Code:
// A Sender class  
class Sender {
  public void SenderMsg(String msg) {
    System.out.println("\nSending a Message: " + msg);
    try {
      Thread.sleep(800);
    } catch (Exception e) {
      System.out.println("Thread interrupted.");
    }
    System.out.println("\n" + msg + "Sent");
  }
}

// A Sender class for sending a message using Threads
class SenderWThreads extends Thread {
  private String msg;
  Sender sd;

  // Receiver method to receive a message object and a message to be sent
  SenderWThreads(String m, Sender obj) {
    msg = m;
    sd = obj;
  }

  public void run() {
    // Checks that only one thread sends a message at a time.
    synchronized (sd) {
      // synchronizing the sender object
      sd.SenderMsg(msg);
    }
  }
}

// Driver Code
public class TestSynchronizedBlock2 {
  public static void main(String args[]) {
    Sender sender = new Sender();
    SenderWThreads sender1 = new SenderWThreads("Hola ", sender);
    SenderWThreads sender2 = new SenderWThreads("Welcome to Javatpoint website ", sender);

    // Start two threads of SenderWThreads type
    sender1.start();
    sender2.start();

    // wait for threads to end
    try {
      sender1.join();
      sender2.join();
    } catch (Exception e) {
      System.out.println("Interrupted");
    }
  }
}

Output:
Sending a Message: Hola

Hola Sent

Sending a Message: Welcome to Javatpoint website

Welcome to Javatpoint website Sent

Kode tersebut adalah contoh penggunaan sinkronisasi dalam Java menggunakan blok `synchronized`. 

1. Kelas `Sender` memiliki metode `SenderMsg` yang mencetak pesan, menunggu selama 800 ms, dan mencetak pesan lagi. 

2. Kelas `SenderWThreads` adalah turunan dari `Thread` yang mengambil pesan dan objek `Sender` sebagai parameter dalam konstruktornya. Dalam metode `run`, itu menggunakan blok `synchronized` pada objek `Sender` untuk memastikan hanya satu thread yang mengirim pesan pada satu waktu. 

3. Dalam `main` method, dua thread `sender1` dan `sender2` dibuat untuk mengirim pesan menggunakan objek `Sender`. Thread tersebut dimulai dengan metode `start`, dan kita menggunakan `join` untuk menunggu kedua thread selesai sebelum melanjutkan eksekusi utama.

Hasilnya adalah pesan-pesan yang dicetak secara bergantian oleh kedua thread dengan penundaan 800 ms, menunjukkan penggunaan sinkronisasi untuk mengkoordinasikan akses ke sumber daya bersama.

Comments

Popular posts from this blog