Modul C
Laporan Sistem Operasi
Modul C
Disusun Oleh :
- private static char currentChar = 'a'; Ini adalah variabel anggota kelas Table yang digunakan untuk menyimpan karakter saat ini yang akan dicetak. Variabel ini bersifat static, yang berarti nilainya bersamaan untuk semua instance objek Table.
- synchronized static void printRange(char startChar, char endChar) adalah metode dalam kelas Table yang digunakan untuk mencetak karakter dalam rentang tertentu. Metode ini diberi kata kunci synchronized dan bersifat static, sehingga hanya satu thread yang dapat menjalankannya pada satu waktu.
- for (char c = startChar; c <= endChar && currentChar <= 'z'; c++) adalah loop for yang akan mencetak karakter dalam rentang yang ditentukan. Selain itu, ada juga kondisi yang memeriksa apakah karakter saat ini masih dalam rentang 'a' hingga 'z'.
- System.out.println(currentChar);: Ini mencetak karakter saat ini ke layar.
- currentChar++;: Meningkatkan currentChar sehingga thread selanjutnya akan mencetak karakter berikutnya.
- try { Thread.sleep(400); } catch (InterruptedException e) { e.printStackTrace(); Ini adalah blok try-catch yang menangani pengecualian jika terjadi gangguan saat tidur (sleep). 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.
- public void run() adalah metode run() yang akan dijalankan saat thread dimulai.
- Table.printRange('a', 'g'); Memanggil metode printRange dari kelas Table untuk mencetak karakter dari 'a' hingga 'g'.
- Sama seperti langkah 9-11, kode ini mendefinisikan MyThread2 untuk mencetak karakter dari 'h' hingga 'l', MyThread3 untuk mencetak karakter dari 'j' hingga 'q', dan MyThread4 untuk mencetak karakter dari 'r' hingga 'z'.
- public class TestSynchronization4 Ini adalah deklarasi kelas utama.
- public static void main(String t[]) adalah metode utama yang akan dieksekusi saat program dimulai.
- MyThread1 t1 = new MyThread1(); Membuat objek MyThread1 dengan nama t1.
- MyThread2 t2 = new MyThread2(); Membuat objek MyThread2 dengan nama t2.
- MyThread3 t3 = new MyThread3(); Membuat objek MyThread3 dengan nama t3.
- MyThread4 t4 = new MyThread4(); Membuat objek MyThread4 dengan nama t4.
- t1.start();: Memulai eksekusi t1.
- t2.start();: Memulai eksekusi t2.
- t3.start();: Memulai eksekusi t3.
- t4.start();: Memulai eksekusi t4.
Kode
ini menggunakan empat thread untuk mencetak karakter dalam beberapa rentang
yang berbeda dan memastikan bahwa hanya satu thread dapat menjalankan metode
printRange pada satu waktu, sehingga karakter yang dicetak akan berurutan dan
tidak saling bercampur.
Output
diatas menunjukkan bahwa empat thread, MyThread1, MyThread2, MyThread3, dan
MyThread4, secara bersamaan mencetak karakter dalam beberapa rentang yang
berbeda. Masing-masing thread mencetak karakter dalam rentang yang ditentukan
oleh pemanggilan metode printRange dari kelas Table. Karena metode printRange
menggunakan kata kunci synchronized, hanya satu thread yang dapat
menjalankannya pada satu waktu. Kode ini memastikan bahwa karakter yang dicetak
akan berurutan dan tidak ada karakter yang hilang atau tumpang tindih. Dalam contoh
ini, karakter 'a' hingga 'g' dicetak oleh MyThread1, karakter 'h' hingga 'l'
dicetak oleh MyThread2, karakter 'j' hingga 'q' dicetak oleh MyThread3, dan
karakter 'r' hingga 'z' dicetak oleh MyThread4. Waktu tidur 400 milidetik
antara setiap karakter yang dicetak memberikan jeda dalam output yang
memungkinkan Anda untuk melihat urutan karakter yang sesuai.
- class Table Ini adalah deklarasi kelas Table.
- private static char currentChar = 'a'; adalah variabel anggota kelas Table yang digunakan untuk menyimpan karakter saat ini yang akan dicetak. Variabel ini bersifat static, yang berarti nilainya bersamaan untuk semua instance objek Table.
- synchronized static void printRange(char startChar, char endChar) adalah metode dalam kelas Table yang digunakan untuk mencetak karakter dalam rentang tertentu. Metode ini diberi kata kunci synchronized dan bersifat static, sehingga hanya satu thread yang dapat menjalankannya pada satu waktu.
- for (char c = startChar; c <= endChar; c++) adalah loop for yang akan mencetak karakter dalam rentang yang ditentukan.
- if (currentChar > 'z') { break; adalah kondisi untuk keluar dari loop jika karakter saat ini melebihi 'z'. Ini memastikan bahwa hanya karakter 'a' hingga 'z' yang akan dicetak.
- System.out.println(currentChar); Ini mencetak karakter saat ini ke layar.
- currentChar++;: Meningkatkan currentChar sehingga thread selanjutnya akan mencetak karakter berikutnya.
- try { Thread.sleep(400); } catch (InterruptedException e) { e.printStackTrace(); }: Ini adalah blok try-catch yang menangani pengecualian jika terjadi gangguan saat tidur (sleep). Setiap thread akan tidur selama 400 milidetik setelah mencetak karakter saat ini.
- public class TestSynchronization5 adalah deklarasi kelas utama.
- public static void main(String[] args) adalah metode utama yang akan dieksekusi saat program dimulai.
- Thread t1 = new Thread() Membuat objek Thread (t1) dan mendefinisikan metode run()-nya secara anonim.
- Table.printRange('a', 'g'); Memanggil metode printRange dari kelas Table untuk mencetak karakter dari 'a' hingga 'g'.
- t1.start();: Memulai eksekusi t1.
- Thread t2 = new Thread() Membuat objek Thread (t2) dengan metode run() yang didefinisikan secara anonim.
- Table.printRange('h', 'l'); Memanggil metode printRange untuk mencetak karakter dari 'h' hingga 'l'.
- t2.start();: Memulai eksekusi t2.
- Sama seperti langkah 22-27, kode ini membuat objek Thread (t3) untuk mencetak karakter dari 'j' hingga 'q'.
- t3.start();: Memulai eksekusi t3.
- Sama seperti langkah 22-27, kode ini membuat objek Thread (t4) untuk mencetak karakter dari 'r' hingga 'z'.
- t4.start();: Memulai eksekusi t4
Kode ini menggunakan thread untuk
mencetak karakter dalam rentang yang berbeda dan memastikan bahwa hanya satu
thread dapat menjalankan metode printRange pada satu waktu, sehingga karakter
yang dicetak akan berurutan dan tidak saling bercampur.
Output
diatas menunjukkan bahwa empat thread, t1, t2, t3, dan t4, secara bersamaan
mencetak karakter dalam beberapa rentang yang berbeda. Masing-masing thread
mencetak karakter dalam rentang yang ditentukan dengan menggunakan metode
printRange dari kelas Table. Karena metode printRange menggunakan kata kunci
synchronized, hanya satu thread yang dapat menjalankannya pada satu waktu. Kode
ini memastikan bahwa karakter yang dicetak akan berurutan dan tidak ada
karakter yang hilang atau tumpang tindih. Dalam contoh ini, karakter 'a' hingga
'g' dicetak oleh t1, karakter 'h' hingga 'l' dicetak oleh t2, karakter 'j'
hingga 'q' dicetak oleh t3, dan karakter 'r' hingga 'z' dicetak oleh t4.
LAMPIRAN :
-TestSynchronization4.java
class Table {
private static char currentChar = 'a';
synchronized static void printRange(char startChar, char endChar) {
for (char c = startChar; c <= endChar && currentChar <= 'z'; c++) {
System.out.println(currentChar);
currentChar++;
try {
Thread.sleep(400);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class MyThread1 extends Thread {
public void run() {
Table.printRange('a', 'g');
}
}
class MyThread2 extends Thread {
public void run() {
Table.printRange('h', 'l');
}
}
class MyThread3 extends Thread {
public void run() {
Table.printRange('j', 'q');
}
}
class MyThread4 extends Thread {
public void run() {
Table.printRange('r', 'z');
}
}
public class TestSynchronization4 {
public static void main(String t[]) {
MyThread1 t1 = new MyThread1();
MyThread2 t2 = new MyThread2();
MyThread3 t3 = new MyThread3();
MyThread4 t4 = new MyThread4();
t1.start();
t2.start();
t3.start();
t4.start();
}
}
-TestSynchronization5.java
Komentar
Posting Komentar