Laporan Sistem Operasi Modul B: Syncronization Menggunakan Annonymous Class dan Syncronization Block
LAPORAN TUGAS SISTEM OPERASI MODUL B
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. Syncronization Method dengan Menggunakan Annonymous Class
Seperti yang sudah dijelaskan pada modul sebelumnya, Synchronized method adalah cara untuk menghindari akses bersamaan ke sebuah metode atau blok kode oleh beberapa thread dalam lingkungan pemrograman berbasis Java. Ini digunakan untuk menghindari konflik dan perlombaan sumber daya antara thread yang beroperasi pada objek yang sama. Synchronized method mengizinkan hanya satu thread untuk menjalankan metode tertentu pada suatu waktu, yang memastikan koherensi dan konsistensi data dalam lingkungan multi-threaded.
Anonymous class adalah jenis kelas dalam Java yang tidak memiliki nama yang jelas. Mereka sering digunakan untuk mengimplementasikan antarmuka (interface) atau kelas abstrak secara langsung tanpa membuat kelas yang terpisah. Dalam konteks synchronized method, Anda dapat menggunakan anonymous class untuk membuat metode synchronized tanpa harus mendefinisikan kelas yang berdiri sendiri.
1. Mencetak Huruf dari Dua Thread Berbeda Menggunakan Annonymous Class
Anonymous class pertama digunakan untuk membuat objek t1 dari kelas Thread pertama. Anonymous class ini mengganti metode run() pada saat pembuatan objek Thread tersebut. Dalam metode run() dari anonymous class ini, obj.printTable('A') dipanggil, yang berarti thread t1 akan menjalankan metode printTable('A') dari objek Table.
Anonymous class kedua digunakan untuk membuat objek t2 dari kelas Thread kedua. Seperti sebelumnya, anonymous class ini mengganti metode run() saat membuat objek Thread. Dalam metode run() dari anonymous class ini, obj.printTable('N') dipanggil, sehingga thread t2 akan menjalankan metode printTable('N') dari objek Table.
B. Syncronization Block
Dalam pemrograman Java, "synchronization block" merujuk pada penggunaan blok kode yang disinkronkan dengan objek tertentu menggunakan kata kunci synchronized. Tujuan utama dari penggunaan synchronized adalah untuk memastikan bahwa hanya satu thread yang dapat menjalankan blok kode yang bersangkutan pada satu waktu. Hal ini digunakan untuk menghindari situasi yang disebut "race condition," di mana beberapa thread dapat mengakses dan memodifikasi data bersamaan, mengakibatkan hasil yang tidak terduga.
Synchronization block biasanya digunakan dalam konteks pengelolaan konkurensi ketika Anda memiliki beberapa thread yang mengakses dan memodifikasi data yang bersamaan. Contoh umum penggunaan synchronization block adalah pada metode atau blok yang memodifikasi variabel atau sumber daya bersama, seperti ArrayList yang diakses oleh beberapa thread.
1. Mencetak Huruf dari Dua Thread yang Berbeda Menggunakan Syncronization Block
Output:
Dalam code di atas, synchronized block digunakan untuk mengatur akses bersama ke bagian tertentu dari kode dalam metode printTable(char c) dalam kelas Table. Ini memastikan bahwa hanya satu thread yang dapat menjalankan bagian yang di-blok secara bersamaan, sehingga menghindari konflik dan persaingan antara thread yang berusaha mengakses metode tersebut.
Berikut adalah penjelasan penggunaan synchronized block dalam code:
Metode printTable(char c) dalam kelas Table memiliki blok synchronized(this) yang dimulai dengan { dan diakhiri dengan }. Blok ini adalah synchronized block.
Penggunaan synchronized(this) berarti bahwa objek saat ini (objek yang sedang menjalankan metode) adalah objek yang digunakan sebagai objek monitor untuk sinkronisasi. Dalam hal ini, objek monitor adalah objek Table yang sama yang sedang digunakan oleh semua thread.
Ketika sebuah thread memasuki synchronized block dengan pernyataan synchronized(this), itu mendapatkan "kunci" yang mengunci blok ini. Dengan demikian, jika satu thread sudah ada di dalam blok ini, thread lain harus menunggu hingga thread pertama selesai menjalankan blok tersebut.
Dalam synchronized block, terdapat loop yang mencetak karakter berdasarkan argumen c. Ketika thread sedang menjalankan kode di dalam blok ini, tidak ada thread lain yang dapat masuk ke dalam blok yang sama pada saat yang bersamaan.
Dengan penggunaan synchronized block ini, kita memastikan bahwa hanya satu thread yang dapat menjalankan metode printTable dalam objek Table yang sama pada satu waktu. Ini penting untuk menghindari kondisi balapan (race condition) dan kesalahan akses bersama yang dapat terjadi ketika dua atau lebih thread berusaha mengakses data bersama tanpa sinkronisasi. Dengan demikian, synchronized block membantu menjaga integritas data dan menghindari masalah konkurensi dalam program.
C. Syncronization Block dengan Annonymous Class
Dalam contoh program diatas, synchronization block digunakan dengan anonymous class untuk mengendalikan akses ke metode SenderMsg dari objek Sender oleh dua thread yang berbeda. Mari kita jelaskan bagaimana kode tersebut berfungsi:
Dua objek Thread, yaitu sender1 dan sender2, dibuat. Masing-masing objek thread memiliki anonymous class yang mengimplementasikan interface Runnable. Ini memungkinkan kita untuk menentukan tindakan yang akan dijalankan oleh thread ketika dimulai.
Pada saat menjalankan thread sender1 dan sender2, keduanya masuk ke dalam blok synchronized (sender). Ini berarti bahwa kedua thread akan mencoba memperoleh kunci (lock) yang diperlukan untuk mengakses objek sender. Hanya satu thread yang akan berhasil memperoleh kunci, sementara thread lainnya harus menunggu sampai kunci tersebut dilepaskan.
Ketika satu thread berhasil memperoleh kunci (lock) dan masuk ke dalam blok synchronized, maka thread tersebut menjalankan metode sender.SenderMsg() untuk mengirim pesan. Sementara itu, thread lain menunggu sampai kunci dilepaskan sebelum dapat melanjutkan eksekusi.
Setelah thread pertama selesai menjalankan metode sender.SenderMsg(), ia melepaskan kunci dan thread kedua dapat mengambil kunci tersebut dan menjalankan metode sender.SenderMsg().
Dengan demikian, penggunaan synchronization block dalam kode tersebut memastikan bahwa hanya satu thread yang dapat mengirim pesan melalui objek Sender pada satu waktu, sehingga menghindari persaingan dan konflik yang mungkin terjadi jika tidak ada mekanisme sinkronisasi. Ini membantu memastikan konsistensi dan keamanan akses bersama ke sumber daya bersama dalam konteks multithreading.






Komentar
Posting Komentar