Modul A
Laporan Sistem Operasi
Modul A
Disusun Oleh :
- Understanding the problem without Synchronization
-TestSynchronization1.java
- class Table Ini adalah deklarasi kelas Table.
- private char currentChar = 'a' Ini adalah variabel anggota kelas Table yang menyimpan karakter saat ini yang akan dicetak. Nilainya diinisialisasi dengan 'a'.
- void printAlphabets(char startChar, char endChar) Ini adalah metode dalam kelas Table yang digunakan untuk mencetak huruf-huruf dalam rentang tertentu. Metode ini menerima dua parameter, yaitu startChar (karakter awal) dan endChar (karakter akhir).
- for (char c = startChar; c <= endChar; c++) Ini adalah loop for yang akan berjalan dari startChar hingga endChar untuk mencetak huruf-huruf dalam rentang yang ditentukan.
- System.out.println(currentChar) Ini mencetak karakter saat ini, yaitu currentChar, ke layar.
- Selanjutnya, ada blok kondisional if yang memeriksa apakah currentChar kurang dari 'z'. Jika benar, maka currentChar ditingkatkan untuk mencetak huruf berikutnya dalam urutan abjad. Jika currentChar sudah mencapai 'z', maka currentChar direset ke 'a' untuk mengulang urutan abjad.
- try { Thread.sleep(400); } catch (InterruptedException e) { System.out.println(e); Ini adalah blok try-catch yang menangani pengecualian jika terjadi gangguan saat tidur (sleep). Dalam hal ini, setiap thread akan tidur selama 400 milidetik setiap kali selesai mencetak karakter saat ini.
- class MyThread1 extends Thread Ini adalah deklarasi kelas MyThread1, yang merupakan subclass dari Thread. Thread ini akan digunakan untuk mencetak huruf-huruf dari 'a' hingga 'm'.
- class MyThread2 extends Thread Ini adalah deklarasi kelas MyThread2, yang juga merupakan subclass dari Thread. Thread ini akan digunakan untuk mencetak huruf-huruf dari 'n' hingga 'z'.
- public class TestSynchronization1 Ini adalah deklarasi kelas utama.
- public static void main(String args[]) Ini adalah metode utama yang akan dieksekusi saat program dimulai.
- Table obj = new Table(); Membuat objek dari kelas Table dengan nama obj.
- MyThread1 t1 = new MyThread1(obj); Membuat objek t1 dari kelas MyThread1 dan melewatkan objek obj sebagai parameter constructor.
- MyThread2 t2 = new MyThread2(obj); Membuat objek t2 dari kelas MyThread2 dan melewatkan objek obj sebagai parameter constructor.
- t1.start();: Memulai eksekusi thread t1 dengan memanggil metode start(), yang pada gilirannya akan menjalankan metode run() di dalam MyThread1.
- t2.start();: Memulai eksekusi thread t2 dengan memanggil metode start(), yang pada gilirannya akan menjalankan metode run() di dalam MyThread2.
Dengan
menggunakan dua thread yang berbeda, program ini mencetak huruf-huruf dalam dua
rentang yang berbeda secara bersamaan. Namun, perlu dicatat bahwa tidak ada
sinkronisasi yang diterapkan dalam kode ini, sehingga hasil cetakan dapat
berubah-ubah antara eksekusi yang berbeda.
Output dari kode diatas adalah bahwa dua thread, MyThread1 dan MyThread2, mencetak huruf-huruf dalam dua rentang yang berbeda secara bersamaan, tetapi tanpa sinkronisasi. Sebagai hasilnya, terlihat output yang tidak teratur dan huruf-huruf dari kedua rentang dapat saling bercampur. Ini terjadi karena kedua thread dapat mengakses dan memodifikasi variabel currentChar secara bersamaan tanpa koordinasi yang tepat. Jadi, urutan cetakan huruf-huruf dalam rentang 'a' hingga 'm' dan 'n' hingga 'z' mungkin tidak selalu berurutan atau konsisten, dan hasilnya mungkin berbeda setiap kali program dijalankan.
2. Java Synchronized Method
-TestSynchronization2.java
- private int currentChar = 97; Ini adalah variabel anggota kelas Table yang menyimpan nilai ASCII karakter saat ini (dalam kasus ini, 97 adalah kode ASCII untuk 'a').
- synchronized void printAlphabets(int startChar, int endChar) Ini adalah metode dalam kelas Table yang digunakan untuk mencetak huruf-huruf dalam rentang tertentu. Metode ini diberi kata kunci synchronized, yang mengunci objek t ketika metode ini dieksekusi, memastikan bahwa hanya satu thread dapat menjalankannya pada suatu waktu.
- for (int i = startChar; i <= endChar; i++) Ini adalah loop for yang akan berjalan dari startChar hingga endChar untuk mencetak huruf-huruf dalam rentang yang ditentukan.
- System.out.println((char) currentChar); Ini mencetak karakter saat ini (diubah dari nilai ASCII currentChar menjadi karakter) ke layar.
- currentChar++; Menambahkan nilai currentChar sehingga thread selanjutnya akan mencetak karakter berikutnya.
- if (currentChar > 122) { currentChar = 97; } Jika currentChar melebihi kode ASCII untuk 'z' (122), maka currentChar direset ke kode ASCII untuk 'a' (97), sehingga siklus huruf berulang.
- try { Thread.sleep(400); } catch (InterruptedException e) { System.out.println(e); } Ini adalah blok try-catch yang menangani pengecualian jika terjadi gangguan saat tidur (sleep). Dalam hal ini, setiap thread akan tidur selama 400 milidetik setelah mencetak karakter saat ini.
- class MyThread1 extends Thread Ini adalah deklarasi kelas MyThread1, yang merupakan subclass dari Thread. Thread ini akan digunakan untuk mencetak huruf-huruf dari 'a' hingga 'm'.
- class MyThread2 extends Thread Ini adalah deklarasi kelas MyThread2, yang juga merupakan subclass dari Thread. Thread ini akan digunakan untuk mencetak huruf-huruf dari 'n' hingga 'z'.
- public class TestSynchronization2 {: Ini adalah deklarasi kelas utama.
- public static void main(String args[]) {: Ini adalah metode utama yang akan dieksekusi saat program dimulai.
- Table obj = a Table();: Membuat objek dari kelas Table dengan nama obj.
- MyThread1 t1 = new MyThread1(obj);: Membuat objek t1 dari kelas MyThread1 dan melewatkan objek obj sebagai parameter constructor.
- MyThread2 t2 = new MyThread2(obj);: Membuat objek t2 dari kelas MyThread2 dan melewatkan objek obj sebagai parameter constructor.
- t1.start();: Memulai eksekusi thread t1 dengan memanggil metode start(), yang pada gilirannya akan menjalankan metode run() di dalam MyThread1.
- t2.start();: Memulai eksekusi thread t2 dengan memanggil metode start(), yang pada gilirannya akan menjalankan metode run() di dalam MyThread2.
Karena
metode printAlphabets diberi kata kunci synchronized, kedua thread akan secara
bergantian mengakses metode ini, sehingga hasil cetakannya akan berurutan dan
tidak terjadi interupsi antara kedua thread.
Output :
Komentar
Posting Komentar