Modul B

Laporan Tugas Sistem Operasi

 

MODUL B

 

Disusun untuk memenuhi 

Tugas Sistem Operasi

 

Oleh:

 

 

M.Taris Rizki

2208107010047

 

 

 



 

 

 

JURUSAN INFORMATIKA

FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM 

UNIVERSITAS SYIAH KUALA

DARUSSALAM, BANDA ACEH

2023



 

Pendahuluan

Pada praktikum ini, kami mengimplementasikan konsep synchronization dalam bahasa pemrograman Java. Synchronization digunakan untuk mengatur akses bersama ke sumber daya bersama oleh beberapa thread.

Bahan praktikum yang digunakan dapat ditemukan di JavaTpoint - Synchronization in Java.

Tujuan Praktikum

Tujuan dari praktikum ini adalah untuk memahami dan mengimplementasikan konsep synchronization dalam bahasa pemrograman Java. Synchronization digunakan untuk mengendalikan akses bersama ke sumber daya bersama oleh beberapa thread agar dapat menjaga integritas data dan mencegah konflik.

Program yang Diujikan

Modul B

  • TestSynchronization3.java


  • TestSynchronizedBlock1.java


  • TestSynchronizedBlock2.java


Hasil dan Modifikasi

  • TestSynchronization3.java

Ouput:



Dalam program ini, kita menggunakan dua utas dengan menggunakan kelas anonim, sehingga membutuhkan sedikit kode.

Pertama, kita memiliki kelas Table yang memiliki metode printTable yang disinkronkan. Ini berarti hanya satu utas dapat mengakses metode ini pada satu waktu, menghindari masalah yang mungkin timbul jika beberapa utas mencoba mengaksesnya secara bersamaan.

Kemudian, kita memiliki kelas TestSynchronization3 yang berisi metode main. Dalam metode ini, kita membuat objek dari kelas Table dengan menggunakan kata kunci final untuk memastikan bahwa objek ini tidak dapat diubah setelah inisialisasi.

Selanjutnya, kita membuat dua utas (t1 dan t2) menggunakan kelas anonim. Dalam masing-masing utas, kita mendefinisikan metode run yang akan dieksekusi ketika utas tersebut dimulai. Di dalam metode run, kita memanggil metode printTable dari objek Table yang telah kita buat sebelumnya.

Penting untuk disadari bahwa penggunaan metode sinkronisasi di sini membantu mengamankan akses ke metode printTable sehingga tidak ada bentrok ketika kedua utas mencoba menjalankannya secara bersamaan.

Singkatnya, penggunaan kelas anonim memungkinkan kita membuat objek utas secara langsung tanpa harus membuat kelas turunan tambahan, mengurangi jumlah kode yang perlu ditulis.

Program ini juga menggunakan metode sinkronisasi pada objek Table, yang memastikan bahwa hanya satu utas (thread) yang dapat mengakses metode printTable pada satu waktu. Ini membantu menghindari kondisi balapan (race conditions) dan memastikan keluaran yang konsisten ketika beberapa utas berbagi sumber daya.

  • TestSynchronizedBlock1.java

Output:



  1. Program Setelah Modifikasi :

Program ini terdiri dari tiga kelas utama yaitu AlphabetTable, AlphabetThread1, dan AlphabetThread2. Pada kelas AlphabetTable, ada metode printAlphabets yang mencetak lima huruf alfabet dari 'A' hingga 'E' dengan jeda waktu 400 milidetik antara setiap cetakan. Dalam metode ini, terdapat blok synchronized (this) untuk memastikan bahwa hanya satu thread yang dapat mengakses metode ini pada satu waktu.

Kelas AlphabetThread1 dan AlphabetThread2 masing-masing adalah thread yang memanggil metode printAlphabets dari objek AlphabetTable. Program utama, TestSynchronizedBlock1, membuat satu objek AlphabetTable dan dua thread yang menggunakan objek tersebut. Kedua thread ini dimulai (start()) dan secara bersamaan mencoba untuk mengakses metode printAlphabets. Dengan adanya blok sinkronisasi, hanya satu thread yang dapat menjalankan metode tersebut pada satu waktu.

  1. Program Sebelum Modifikasi :

Program ini juga mencoba mengilustrasikan sinkronisasi dengan kelas Table, MyThread1, dan MyThread2. Metodenya adalah printTable yang mencetak lima kelipatan angka, dengan blok sinkronisasi yang serupa di dalamnya.

Seperti pada program pertama, program utama TestSynchronizedBlock1 membuat satu objek Table dan dua thread (MyThread1 dan MyThread2) yang menggunakan objek tersebut. Keduanya mencoba menjalankan metode printTable secara bersamaan. Dengan sinkronisasi, hanya satu thread yang dapat menjalankan metode tersebut pada satu waktu.

  • TestSynchronizedBlock2.java




Output:


Terdapat sedikit modifikasi kode pada TestSynchronizedBlock2.java. yaitu pada main class bernama TestSynchronizedBlock2 yang harusnya TestSynchronizedBlock2. Dikarenakan dalam java perbedaan nama file dan nama class main akan mengakibatkan eror. Pembahasan:

Dalam contoh kode kali ini, saya menambahkan sebuah blok sinkronisasi menggunakan kelas anonim untuk memberikan pemahaman lebih lanjut tentang bagaimana blok sinkronisasi dapat diimplementasikan dengan menggunakan kelas anonim dalam Java.

  • class Sender memiliki metode SenderMsg yang mensimulasikan pengiriman pesan. Terdapat penundaan untuk meniru tugas yang memakan waktu.
  • Class SenderWThreads extends Thread mengextend Thread dan dirancang untuk mengirim pesan menggunakan thread. Terdapat metode run, yang dijalankan saat thread dimulai. Metode ini memanggil metode SenderMsg dari kelas Sender dalam blok yang disinkronkan untuk memastikan hanya satu thread yang mengirim pesan pada satu waktu.
  • TestSynchronizedBlock2 (Class main)
    • Metode main membuat instan dari kelas Sender dan dua instan dari kelas SenderWThreads.
    • Dua thread dimulai (sender1 dan sender2) untuk mengirim pesan secara bersamaan.
    • Pada contoh kelas anonim (sender1), terdapat penggunaan blok sinkronisasi untuk memastikan bahwa hanya satu thread yang mengirim pesan pada satu waktu.

Secara keseluruhan, blok sinkronisasi digunakan untuk memastikan bahwa operasi pengiriman pesan dilakukan secara terkendali dan tidak saling bersaing antar thread. Pada contoh kelas anonim, blok sinkronisasi diterapkan secara langsung untuk menunjukkan alternatif penggunaan dalam mencapai tujuan tersebut.

Kesimpulan

Laporan ini membahas praktikum Sistem Operasi dengan fokus pada konsep synchronisation dalam Java. Tujuannya adalah memahami dan mengimplementasikan synchronisation untuk mengatur akses bersama ke sumber daya oleh beberapa thread. Tiga program utama yang diuji adalah TestSynchronization3.java, TestSynchronizedBlock1.java, dan TestSynchronizedBlock2.java. Masing-masing menunjukkan penggunaan synchronisation untuk mencegah konflik dan menjaga integritas data, baik dengan menggunakan kelas anonim maupun blok synchronised. Keseluruhan, laporan ini memberikan pemahaman praktis tentang penggunaan synchronisation dalam pemrograman Java.

Komentar

Postingan populer dari blog ini

Modul C