Laporan Tugas Sistem Operasi Modul C: Static Syncronization

                                                            LAPORAN TUGAS SISTEM OPERASI MODUL C

Diajukan Untuk Memenuhi Tugas Sistem Operasi

Dosen Pengampu

Arie Budiansyah, ST., M.Eng

 


 

Disusun Oleh:

 

 

Arif Maulana

(2208107010067)

Informatika

Semester 3

 

 

 

 

FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM

UNIVERSITAS SYIAH KUALA

2023

            


             

            A.  Static Syncronization 

Static synchronization dalam Java digunakan untuk mengatur akses bersama antara beberapa thread ke metode atau blok kode statis sehingga hanya satu thread yang dapat menjalankannya pada satu waktu. Hal ini berguna untuk menghindari kondisi balapan (race conditions) dan memastikan konsistensi data ketika beberapa thread mencoba mengakses sumber daya bersama.

Ada dua cara untuk mencapai static synchronization dalam Java

1. Menggunakan Metode Statis yang Disinkronkan. Dalam pendekatan ini, Anda menandai metode statis dengan kata kunci synchronized untuk mengindikasikan bahwa hanya satu thread yang dapat menjalankan metode tersebut pada satu waktu.

2. Menggunakan Blok Kode yang Disinkronkan dalam Metode StatisDalam pendekatan ini, Anda menggunakan blok kode synchronized di dalam metode statis. Anda perlu menentukan objek monitor (biasanya kelas itu sendiri) yang akan digunakan untuk sinkronisasi. Ini memberi Anda kontrol yang lebih halus atas area tertentu dalam metode.

Penggunaan static synchronization penting ketika Anda bekerja dengan sumber daya bersama yang dapat diakses oleh beberapa thread, terutama pada lingkungan multithreading. Dengan cara ini, Anda dapat memastikan bahwa akses ke metode atau blok kode statis tertentu dilakukan dengan aman, menghindari potensi konflik dan menjaga konsistensi data dalam aplikasi.


1. Contoh Program


Output:


Dalam kode diatas, static synchronization digunakan untuk mengontrol akses bersama ke metode printTable(char c) dalam kelas Table. Static synchronization memastikan bahwa hanya satu thread yang dapat menjalankan metode tersebut pada satu waktu, bahkan jika terdapat beberapa instance (objek) dari kelas Table.

berikut penjelasan bagaimana static synchronization berfungsi dalam program ini:

program memiliki kelas Table yang memiliki metode printTable(char c). Metode ini mencetak karakter dalam loop.

Metode printTable(char c) dideklarasikan sebagai synchronized static. Ini berarti metode tersebut adalah statis (tidak terkait dengan instance objek tertentu) dan akan dilindungi oleh mekanisme sinkronisasi.

Anda membuat empat thread, yaitu MyThread1, MyThread2, MyThread3, dan MyThread4. Masing-masing dari thread ini akan mencoba menjalankan metode printTable(char c).

Saat Anda memulai keempat thread tersebut dengan memanggil start(), mereka akan mencoba masuk ke dalam metode printTable(char c) secara bersamaan.

Namun, karena metode printTable(char c) diberi kata kunci synchronized, hanya satu thread yang dapat menjalankannya pada satu waktu, meskipun ada beberapa instance dari kelas Table.

Sebagai contoh, jika MyThread1 memasuki metode printTable(char c) dan menjalankannya, maka thread lain seperti MyThread2, MyThread3, dan MyThread4 harus menunggu sampai MyThread1 selesai sebelum mereka bisa memasuki metode yang sama.

Ini memastikan bahwa urutan karakter yang dicetak oleh keempat thread akan terkoordinasi dan tidak akan bercampur aduk, karena hanya satu thread yang memiliki akses ke metode printTable(char c) pada satu waktu.


2. Contoh program Static Syncronization Menggunakan Annonymous class




























            output:











    

    Pada kode di atas, terdapat kelas Table yang memiliki metode printTable(char c) yang memiliki modifier synchronized static. Ini berarti metode printTable adalah metode statis yang disinkronkan, yang berarti hanya satu utas (thread) dapat memanggil metode ini pada satu waktu. Kode ini digunakan untuk mencetak karakter berurutan ke layar dalam urutan yang berbeda, dengan masing-masing utas mengambil karakter awal yang berbeda ('A', 'N', 'G', 'U') dan mencetak karakter berikutnya dalam urutan ASCII. Selanjutnya, Code diatas memiliki kelas TestSynchronization5 yang memiliki metode main, yang akan membuat empat utas (t1, t2, t3, t4) dan masing-masing dari mereka akan memanggil metode printTable dari kelas Table.

Pentingnya penggunaan synchronized static adalah untuk memastikan bahwa hanya satu utas yang dapat menjalankan metode printTable pada satu waktu, sehingga menghindari konflik dan mencetak karakter secara berurutan.

Penggunaan anonymous class dalam kode di atas adalah cara untuk membuat utas baru dengan meneruskan metode run() yang di-override. Anonymous class adalah kelas tanpa nama yang didefinisikan dan digunakan dalam satu langkah. Dalam hal ini, dalam code diatas terdapat empat utas baru (t1, t2, t3, dan t4) yang masing-masing memiliki metode run() yang di-override untuk memanggil metode printTable dari kelas Table dengan karakter awal yang berbeda ('A', 'N', 'G', 'U'). Dengan penggunaan synchronized static, memastikan bahwa meskipun empat utas berjalan secara bersamaan, hanya satu di antaranya yang dapat menjalankan metode printTable pada satu waktu, sehingga karakter dicetak secara berurutan.

            


Komentar

Postingan populer dari blog ini

Laporan Tugas Sistem Operasi Modul D: Deadlock in Java