SlideShare a Scribd company logo
Pemrog. Berorientasi Objek **, Pertemuan Ke-12
Noviyanto Halaman 1
Sinkronisasi
Mengapa menggunakan sinkronisasi threads?
Bagaimanapun juga sebuah thread yang berjalan bersama-sama kadang-kadang membutuhkan
resource atau method dari luar
Butuh untuk berkomunikasi satu dengan yang lain sehingga dapat mengetahui status dan
aktifitas mereka
Contoh: Permasalahan Produser-Konsumer
1 class TwoStrings {
2 static void print(String str1, String str2) {
3 System.out.print(str1);
4 try {
5 Thread.sleep(500);
6 } catch (InterruptedException ie) {
7 }
8 System.out.println(str2);
9 }
10 }
11 class PrintStringsThread implements Runnable {
12 Thread thread;
13 String str1, str2;
14 PrintStringsThread(String str1, String str2) {
15 this.str1 = str1;
16 this.str2 = str2;
17 thread = new Thread(this);
18 thread.start();
19 }
20 public void run() {
21 TwoStrings.print(str1, str2);
22 }
23 }
24 class TestThread {
25 public static void main(String args[]) {
26 new PrintStringsThread("Hello ", "there.");
27 new PrintStringsThread("How are ", "you?");
28 new PrintStringsThread("Thank you ",
29 "very much!");
30 }
31 }
Contoh hasil:
Hello How are Thank you there.
you?
very much!
Mengunci sebuah object:
Untuk memastikan bahwa hanya satu thread yang mendapatkan hak akses kedalam method
tertentu
Java memperbolehkan penguncian terhadap sebuah object termasuk method-method-nya
dengan menggunakan monitor
Object tersebut akan menjalankan sebuah monitor implicit pada saat object dari
method sinkronisasi dipanggil
Sekali object tersebut dimonitor, monitor tersebut akan memastikan bahwa tidak ada
thread yang akan mengakses object yang sama
Pemrog. Berorientasi Objek **, Pertemuan Ke-12
Noviyanto Halaman 2
Sinkronisasi sebuah method:
Menggunakan keyword synchronized
Dapat menjadi header dari pendefinisian method
Dapat mensinkronisasi object dimana method tersebut menjadi anggota dari
synchronized (<object>) {
//statements yang akan disinkronisasikan
}
Contoh Synchronized Pertama
1 class TwoStrings {
2 synchronized static void print(String str1,
3 String str2) {
4 System.out.print(str1);
5 try {
6 Thread.sleep(500);
7 } catch (InterruptedException ie) {
8 }
9 System.out.println(str2);
10 }
11 }
12 class PrintStringsThread implements Runnable {
13 Thread thread;
14 String str1, str2;
15 PrintStringsThread(String str1, String str2) {
16 this.str1 = str1;
17 this.str2 = str2;
18 thread = new Thread(this);
19 thread.start();
20 }
21 public void run() {
22 TwoStrings.print(str1, str2);
23 }
24 }
25 class TestThread {
26 public static void main(String args[]) {
27 new PrintStringsThread("Hello ", "there.");
28 new PrintStringsThread("How are ", "you?");
29 new PrintStringsThread("Thank you ",
30 "very much!");
31 }
32 }
Contoh Hasil:
Hello there.
How are you?
Thank you very much!
Pemrog. Berorientasi Objek **, Pertemuan Ke-12
Noviyanto Halaman 3
Contoh Synchronized Kedua
1 class TwoStrings {
2 static void print(String str1, String str2) {
3 System.out.print(str1);
4 try {
5 Thread.sleep(500);
6 } catch (InterruptedException ie) {
7 }
8 System.out.println(str2);
9 }
10 }
11 class PrintStringsThread implements Runnable {
12 Thread thread;
13 String str1, str2;
14 TwoStrings ts;
15 PrintStringsThread(String str1, String str2,
16 TwoStrings ts) {
17 this.str1 = str1;
18 this.str2 = str2;
19 this.ts = ts;
20 thread = new Thread(this);
21 thread.start();
22 }
23 public void run() {
24 synchronized (ts) {
25 ts.print(str1, str2);
26 }
27 }
28 }
29 class TestThread {
30 public static void main(String args[]) {
31 TwoStrings ts = new TwoStrings();
32 new PrintStringsThread("Hello ", "there.", ts);
33 new PrintStringsThread("How are ", "you?", ts);
34 new PrintStringsThread("Thank you ",
35 "very much!", ts);
36 }}
Komunikasi Antar Thread: Methods
Methods untuk komunikasi Interthread
public final void wait()
Menyebabkan thread ini menunggu sampai thread yang lain memanggil
notify atau notifyAll method dari object ini. Hal ini dapat menyebabkan
InterruptedException.
public final void notify()
Membangunkan thread yang telah memanggil method wait dari object yang
sama.
public final void notifyAll()
Membangunkan semua thread yang telah memanggil method wait dari object
yang sama.
Pemrog. Berorientasi Objek **, Pertemuan Ke-12
Noviyanto Halaman 4
Komunikasi Antar Thread
Contoh Produsen-Konsumen
1 class SharedData {
2 int data;
3 synchronized void set(int value) {
4 System.out.println("Generate " + value);
5 data = value;
6 }
7 synchronized int get() {
8 System.out.println("Get " + data);
9 return data;
10 }
11 }
12 class Producer implements Runnable {
13 SharedData sd;
14 Producer(SharedData sd) {
15 this.sd = sd;
16 new Thread(this, "Producer").start();
17 }
18 public void run() {
19 for (int i = 0; i < 10; i++) {
20 sd.set((int)(Math.random()*100));
21 }
22 }
23 }
Pemrog. Berorientasi Objek **, Pertemuan Ke-12
Noviyanto Halaman 5
24 class Consumer implements Runnable {
25 SharedData sd;
26 Consumer(SharedData sd) {
27 this.sd = sd;
28 new Thread(this, "Consumer").start();
29 }
30 public void run() {
31 for (int i = 0; i < 10 ; i++) {
32 sd.get();
33 }
34 }
35 }
36 class TestProducerConsumer {
37 public static void main(String args[])
38 throws Exception {
39 SharedData sd = new SharedData();
40 new Producer(sd);
41 new Consumer(sd);
42 }
43 }
Contoh hasil:
Generate 8
Generate 45
Generate 52
Generate 65
Get 65
Generate 23
Get 23
Generate 49
Get 49
Generate 35
Get 35
Generate 39
Get 39
Generate 85
Get 85
Get 85
Get 85
Generate 35
Get 35
Get 35
Contoh Produsen-Konsumen yang telah diperbaiki
1 class SharedData {
2 int data;
3 boolean valueSet = false;
4 synchronized void set(int value) {
5 if (valueSet) { //hanya dihasilkan jika mempumyai sebuah nilai
6 try {
7 wait();
8 } catch (InterruptedException ie) {
9 }
10 }
11 System.out.println("Generate " + value);
12 data = value;
13 valueSet = true;
14 notify();
15 }
16 synchronized int get() {
17 if (!valueSet) {
18 //producer belum memiliki suatu nilai
19 try {
20 wait();
21 } catch (InterruptedException ie) {
22 }
23 }
24 System.out.println("Get " + data);
25 valueSet = false;
26 notify();
27 return data;
28 }
29 }
30
31 /* Bagian kode tertentu tidak berubah. */
Pemrog. Berorientasi Objek **, Pertemuan Ke-12
Noviyanto Halaman 6
Contoh hasil:
Generate 76
Get 76
Generate 25
Get 25
Generate 34
Get 34
Generate 84
Get 84
Generate 48
Get 48
Generate 29
Get 29
Generate 26
Get 26
Generate 86
Get 86
Generate 65
Get 65
Generate 38
Get 38
Generate 46
Get 46
Ringkasan
Sinkronisasi
Mengunci sebuah Object
Keyword synchronized
Method header
Object
Komunikasi Antar Thread (Interthread)
Methods
wait
notify
notifyAll

More Related Content

More from Jurnal IT

7_Packages.pdf
7_Packages.pdf7_Packages.pdf
7_Packages.pdf
Jurnal IT
 
6_String.pdf
6_String.pdf6_String.pdf
6_String.pdf
Jurnal IT
 
5_Pewarisan.pdf
5_Pewarisan.pdf5_Pewarisan.pdf
5_Pewarisan.pdf
Jurnal IT
 
4_Array.pdf
4_Array.pdf4_Array.pdf
4_Array.pdf
Jurnal IT
 
3_Pengertian_Class_Object_Method.pdf
3_Pengertian_Class_Object_Method.pdf3_Pengertian_Class_Object_Method.pdf
3_Pengertian_Class_Object_Method.pdf
Jurnal IT
 
2_Struktur_kontrol.pdf
2_Struktur_kontrol.pdf2_Struktur_kontrol.pdf
2_Struktur_kontrol.pdf
Jurnal IT
 
1_Pengenalan_Java.pdf
1_Pengenalan_Java.pdf1_Pengenalan_Java.pdf
1_Pengenalan_Java.pdf
Jurnal IT
 
delphi part 13.pdf
delphi part 13.pdfdelphi part 13.pdf
delphi part 13.pdf
Jurnal IT
 
delphi part 11.pdf
delphi part 11.pdfdelphi part 11.pdf
delphi part 11.pdf
Jurnal IT
 
delphi part 8 new.pdf
delphi part 8 new.pdfdelphi part 8 new.pdf
delphi part 8 new.pdf
Jurnal IT
 
delphi part 7 new.pdf
delphi part 7 new.pdfdelphi part 7 new.pdf
delphi part 7 new.pdf
Jurnal IT
 
delphi part 6.pdf
delphi part 6.pdfdelphi part 6.pdf
delphi part 6.pdf
Jurnal IT
 
delphi part 5.pdf
delphi part 5.pdfdelphi part 5.pdf
delphi part 5.pdf
Jurnal IT
 
delphi part 4.pdf
delphi part 4.pdfdelphi part 4.pdf
delphi part 4.pdf
Jurnal IT
 
delphi part 3.pdf
delphi part 3.pdfdelphi part 3.pdf
delphi part 3.pdf
Jurnal IT
 
delphi part 2.pdf
delphi part 2.pdfdelphi part 2.pdf
delphi part 2.pdf
Jurnal IT
 
Delphi part 1.pdf
Delphi part 1.pdfDelphi part 1.pdf
Delphi part 1.pdf
Jurnal IT
 
Transparant_database.doc
Transparant_database.docTransparant_database.doc
Transparant_database.doc
Jurnal IT
 
Pertemuan ke XIII b.doc
Pertemuan ke XIII b.docPertemuan ke XIII b.doc
Pertemuan ke XIII b.doc
Jurnal IT
 
Pertemuan ke XIII.doc
Pertemuan ke XIII.docPertemuan ke XIII.doc
Pertemuan ke XIII.doc
Jurnal IT
 

More from Jurnal IT (20)

7_Packages.pdf
7_Packages.pdf7_Packages.pdf
7_Packages.pdf
 
6_String.pdf
6_String.pdf6_String.pdf
6_String.pdf
 
5_Pewarisan.pdf
5_Pewarisan.pdf5_Pewarisan.pdf
5_Pewarisan.pdf
 
4_Array.pdf
4_Array.pdf4_Array.pdf
4_Array.pdf
 
3_Pengertian_Class_Object_Method.pdf
3_Pengertian_Class_Object_Method.pdf3_Pengertian_Class_Object_Method.pdf
3_Pengertian_Class_Object_Method.pdf
 
2_Struktur_kontrol.pdf
2_Struktur_kontrol.pdf2_Struktur_kontrol.pdf
2_Struktur_kontrol.pdf
 
1_Pengenalan_Java.pdf
1_Pengenalan_Java.pdf1_Pengenalan_Java.pdf
1_Pengenalan_Java.pdf
 
delphi part 13.pdf
delphi part 13.pdfdelphi part 13.pdf
delphi part 13.pdf
 
delphi part 11.pdf
delphi part 11.pdfdelphi part 11.pdf
delphi part 11.pdf
 
delphi part 8 new.pdf
delphi part 8 new.pdfdelphi part 8 new.pdf
delphi part 8 new.pdf
 
delphi part 7 new.pdf
delphi part 7 new.pdfdelphi part 7 new.pdf
delphi part 7 new.pdf
 
delphi part 6.pdf
delphi part 6.pdfdelphi part 6.pdf
delphi part 6.pdf
 
delphi part 5.pdf
delphi part 5.pdfdelphi part 5.pdf
delphi part 5.pdf
 
delphi part 4.pdf
delphi part 4.pdfdelphi part 4.pdf
delphi part 4.pdf
 
delphi part 3.pdf
delphi part 3.pdfdelphi part 3.pdf
delphi part 3.pdf
 
delphi part 2.pdf
delphi part 2.pdfdelphi part 2.pdf
delphi part 2.pdf
 
Delphi part 1.pdf
Delphi part 1.pdfDelphi part 1.pdf
Delphi part 1.pdf
 
Transparant_database.doc
Transparant_database.docTransparant_database.doc
Transparant_database.doc
 
Pertemuan ke XIII b.doc
Pertemuan ke XIII b.docPertemuan ke XIII b.doc
Pertemuan ke XIII b.doc
 
Pertemuan ke XIII.doc
Pertemuan ke XIII.docPertemuan ke XIII.doc
Pertemuan ke XIII.doc
 

Recently uploaded

Dokumen Rangkuman Kehadiran Guru ini dipergunakan sebagai bukti dukung yang w...
Dokumen Rangkuman Kehadiran Guru ini dipergunakan sebagai bukti dukung yang w...Dokumen Rangkuman Kehadiran Guru ini dipergunakan sebagai bukti dukung yang w...
Dokumen Rangkuman Kehadiran Guru ini dipergunakan sebagai bukti dukung yang w...
haryonospdsd011
 
SOAL SHB PKN SEMESTER GENAP TAHUN 2023-2024.docx
SOAL SHB PKN SEMESTER GENAP TAHUN 2023-2024.docxSOAL SHB PKN SEMESTER GENAP TAHUN 2023-2024.docx
SOAL SHB PKN SEMESTER GENAP TAHUN 2023-2024.docx
MuhammadBagusAprilia1
 
Prensentasi Visi Misi Sekolah dalam rangka observasi pengawas
Prensentasi Visi Misi Sekolah dalam rangka observasi pengawasPrensentasi Visi Misi Sekolah dalam rangka observasi pengawas
Prensentasi Visi Misi Sekolah dalam rangka observasi pengawas
suprihatin1885
 
Tugas Mandiri 1.4.a.4.3 Keyakinan Kelas.pdf
Tugas Mandiri 1.4.a.4.3 Keyakinan Kelas.pdfTugas Mandiri 1.4.a.4.3 Keyakinan Kelas.pdf
Tugas Mandiri 1.4.a.4.3 Keyakinan Kelas.pdf
muhammadRifai732845
 
RUBRIK OBSERVASI KINERJA KEPALA SEKOLAH.docx
RUBRIK OBSERVASI KINERJA KEPALA SEKOLAH.docxRUBRIK OBSERVASI KINERJA KEPALA SEKOLAH.docx
RUBRIK OBSERVASI KINERJA KEPALA SEKOLAH.docx
kinayaptr30
 
Laporan Kegiatan Pramuka Tugas Tambahan PMM.pdf
Laporan Kegiatan Pramuka Tugas Tambahan PMM.pdfLaporan Kegiatan Pramuka Tugas Tambahan PMM.pdf
Laporan Kegiatan Pramuka Tugas Tambahan PMM.pdf
UmyHasna1
 
PPT Aksi Nyata Diseminasi Modul 1.4.pptx
PPT Aksi Nyata Diseminasi Modul 1.4.pptxPPT Aksi Nyata Diseminasi Modul 1.4.pptx
PPT Aksi Nyata Diseminasi Modul 1.4.pptx
Kurnia Fajar
 
Juknis Pengisian Blanko Ijazah 2024 29 04 2024 Top.pptx
Juknis Pengisian Blanko Ijazah 2024 29 04 2024 Top.pptxJuknis Pengisian Blanko Ijazah 2024 29 04 2024 Top.pptx
Juknis Pengisian Blanko Ijazah 2024 29 04 2024 Top.pptx
mattaja008
 
Laporan pembina seni tari - www.kherysuryawan.id.pdf
Laporan pembina seni tari - www.kherysuryawan.id.pdfLaporan pembina seni tari - www.kherysuryawan.id.pdf
Laporan pembina seni tari - www.kherysuryawan.id.pdf
heridawesty4
 
Modul Ajar Bahasa Inggris Kelas 5 Fase C Kurikulum Merdeka
Modul Ajar Bahasa Inggris Kelas 5 Fase C Kurikulum MerdekaModul Ajar Bahasa Inggris Kelas 5 Fase C Kurikulum Merdeka
Modul Ajar Bahasa Inggris Kelas 5 Fase C Kurikulum Merdeka
Fathan Emran
 
Permainan Wiwi Wowo aksi nyata berkebhinekaan
Permainan Wiwi Wowo aksi nyata berkebhinekaanPermainan Wiwi Wowo aksi nyata berkebhinekaan
Permainan Wiwi Wowo aksi nyata berkebhinekaan
DEVI390643
 
tugas pai kelas 10 rangkuman bab 10 smk madani bogor
tugas pai kelas 10 rangkuman bab 10 smk madani bogortugas pai kelas 10 rangkuman bab 10 smk madani bogor
tugas pai kelas 10 rangkuman bab 10 smk madani bogor
WILDANREYkun
 
Modul Ajar PAI dan Budi Pekerti Kelas 2 Fase A Kurikulum Merdeka
Modul Ajar PAI dan Budi Pekerti Kelas 2 Fase A Kurikulum MerdekaModul Ajar PAI dan Budi Pekerti Kelas 2 Fase A Kurikulum Merdeka
Modul Ajar PAI dan Budi Pekerti Kelas 2 Fase A Kurikulum Merdeka
Fathan Emran
 
Seminar: Sekolah Alkitab Liburan (SAL) 2024
Seminar: Sekolah Alkitab Liburan (SAL) 2024Seminar: Sekolah Alkitab Liburan (SAL) 2024
Seminar: Sekolah Alkitab Liburan (SAL) 2024
SABDA
 
RANCANGAN TINDAKAN AKSI NYATA MODUL 1.4.pptx
RANCANGAN TINDAKAN AKSI NYATA MODUL 1.4.pptxRANCANGAN TINDAKAN AKSI NYATA MODUL 1.4.pptx
RANCANGAN TINDAKAN AKSI NYATA MODUL 1.4.pptx
SurosoSuroso19
 
Bahan Sosialisasi PPDB_1 2024/2025 Bandung
Bahan Sosialisasi PPDB_1 2024/2025 BandungBahan Sosialisasi PPDB_1 2024/2025 Bandung
Bahan Sosialisasi PPDB_1 2024/2025 Bandung
Galang Adi Kuncoro
 
Bab 3 Sejarah Kerajaan Hindu-Buddha.pptx
Bab 3 Sejarah Kerajaan Hindu-Buddha.pptxBab 3 Sejarah Kerajaan Hindu-Buddha.pptx
Bab 3 Sejarah Kerajaan Hindu-Buddha.pptx
nawasenamerta
 
SOSIALISASI PPDB TAHUN AJARAN 2024-2025.pptx
SOSIALISASI PPDB TAHUN AJARAN 2024-2025.pptxSOSIALISASI PPDB TAHUN AJARAN 2024-2025.pptx
SOSIALISASI PPDB TAHUN AJARAN 2024-2025.pptx
astridamalia20
 
Paparan Kurikulum Satuan Pendidikan_LOKAKARYA TPK 2024.pptx.pdf
Paparan Kurikulum Satuan Pendidikan_LOKAKARYA TPK 2024.pptx.pdfPaparan Kurikulum Satuan Pendidikan_LOKAKARYA TPK 2024.pptx.pdf
Paparan Kurikulum Satuan Pendidikan_LOKAKARYA TPK 2024.pptx.pdf
SEMUELSAMBOKARAENG
 
Sapawarga - Manual Guide PPDB Tahun 2024.pdf
Sapawarga - Manual Guide PPDB Tahun 2024.pdfSapawarga - Manual Guide PPDB Tahun 2024.pdf
Sapawarga - Manual Guide PPDB Tahun 2024.pdf
TarkaTarka
 

Recently uploaded (20)

Dokumen Rangkuman Kehadiran Guru ini dipergunakan sebagai bukti dukung yang w...
Dokumen Rangkuman Kehadiran Guru ini dipergunakan sebagai bukti dukung yang w...Dokumen Rangkuman Kehadiran Guru ini dipergunakan sebagai bukti dukung yang w...
Dokumen Rangkuman Kehadiran Guru ini dipergunakan sebagai bukti dukung yang w...
 
SOAL SHB PKN SEMESTER GENAP TAHUN 2023-2024.docx
SOAL SHB PKN SEMESTER GENAP TAHUN 2023-2024.docxSOAL SHB PKN SEMESTER GENAP TAHUN 2023-2024.docx
SOAL SHB PKN SEMESTER GENAP TAHUN 2023-2024.docx
 
Prensentasi Visi Misi Sekolah dalam rangka observasi pengawas
Prensentasi Visi Misi Sekolah dalam rangka observasi pengawasPrensentasi Visi Misi Sekolah dalam rangka observasi pengawas
Prensentasi Visi Misi Sekolah dalam rangka observasi pengawas
 
Tugas Mandiri 1.4.a.4.3 Keyakinan Kelas.pdf
Tugas Mandiri 1.4.a.4.3 Keyakinan Kelas.pdfTugas Mandiri 1.4.a.4.3 Keyakinan Kelas.pdf
Tugas Mandiri 1.4.a.4.3 Keyakinan Kelas.pdf
 
RUBRIK OBSERVASI KINERJA KEPALA SEKOLAH.docx
RUBRIK OBSERVASI KINERJA KEPALA SEKOLAH.docxRUBRIK OBSERVASI KINERJA KEPALA SEKOLAH.docx
RUBRIK OBSERVASI KINERJA KEPALA SEKOLAH.docx
 
Laporan Kegiatan Pramuka Tugas Tambahan PMM.pdf
Laporan Kegiatan Pramuka Tugas Tambahan PMM.pdfLaporan Kegiatan Pramuka Tugas Tambahan PMM.pdf
Laporan Kegiatan Pramuka Tugas Tambahan PMM.pdf
 
PPT Aksi Nyata Diseminasi Modul 1.4.pptx
PPT Aksi Nyata Diseminasi Modul 1.4.pptxPPT Aksi Nyata Diseminasi Modul 1.4.pptx
PPT Aksi Nyata Diseminasi Modul 1.4.pptx
 
Juknis Pengisian Blanko Ijazah 2024 29 04 2024 Top.pptx
Juknis Pengisian Blanko Ijazah 2024 29 04 2024 Top.pptxJuknis Pengisian Blanko Ijazah 2024 29 04 2024 Top.pptx
Juknis Pengisian Blanko Ijazah 2024 29 04 2024 Top.pptx
 
Laporan pembina seni tari - www.kherysuryawan.id.pdf
Laporan pembina seni tari - www.kherysuryawan.id.pdfLaporan pembina seni tari - www.kherysuryawan.id.pdf
Laporan pembina seni tari - www.kherysuryawan.id.pdf
 
Modul Ajar Bahasa Inggris Kelas 5 Fase C Kurikulum Merdeka
Modul Ajar Bahasa Inggris Kelas 5 Fase C Kurikulum MerdekaModul Ajar Bahasa Inggris Kelas 5 Fase C Kurikulum Merdeka
Modul Ajar Bahasa Inggris Kelas 5 Fase C Kurikulum Merdeka
 
Permainan Wiwi Wowo aksi nyata berkebhinekaan
Permainan Wiwi Wowo aksi nyata berkebhinekaanPermainan Wiwi Wowo aksi nyata berkebhinekaan
Permainan Wiwi Wowo aksi nyata berkebhinekaan
 
tugas pai kelas 10 rangkuman bab 10 smk madani bogor
tugas pai kelas 10 rangkuman bab 10 smk madani bogortugas pai kelas 10 rangkuman bab 10 smk madani bogor
tugas pai kelas 10 rangkuman bab 10 smk madani bogor
 
Modul Ajar PAI dan Budi Pekerti Kelas 2 Fase A Kurikulum Merdeka
Modul Ajar PAI dan Budi Pekerti Kelas 2 Fase A Kurikulum MerdekaModul Ajar PAI dan Budi Pekerti Kelas 2 Fase A Kurikulum Merdeka
Modul Ajar PAI dan Budi Pekerti Kelas 2 Fase A Kurikulum Merdeka
 
Seminar: Sekolah Alkitab Liburan (SAL) 2024
Seminar: Sekolah Alkitab Liburan (SAL) 2024Seminar: Sekolah Alkitab Liburan (SAL) 2024
Seminar: Sekolah Alkitab Liburan (SAL) 2024
 
RANCANGAN TINDAKAN AKSI NYATA MODUL 1.4.pptx
RANCANGAN TINDAKAN AKSI NYATA MODUL 1.4.pptxRANCANGAN TINDAKAN AKSI NYATA MODUL 1.4.pptx
RANCANGAN TINDAKAN AKSI NYATA MODUL 1.4.pptx
 
Bahan Sosialisasi PPDB_1 2024/2025 Bandung
Bahan Sosialisasi PPDB_1 2024/2025 BandungBahan Sosialisasi PPDB_1 2024/2025 Bandung
Bahan Sosialisasi PPDB_1 2024/2025 Bandung
 
Bab 3 Sejarah Kerajaan Hindu-Buddha.pptx
Bab 3 Sejarah Kerajaan Hindu-Buddha.pptxBab 3 Sejarah Kerajaan Hindu-Buddha.pptx
Bab 3 Sejarah Kerajaan Hindu-Buddha.pptx
 
SOSIALISASI PPDB TAHUN AJARAN 2024-2025.pptx
SOSIALISASI PPDB TAHUN AJARAN 2024-2025.pptxSOSIALISASI PPDB TAHUN AJARAN 2024-2025.pptx
SOSIALISASI PPDB TAHUN AJARAN 2024-2025.pptx
 
Paparan Kurikulum Satuan Pendidikan_LOKAKARYA TPK 2024.pptx.pdf
Paparan Kurikulum Satuan Pendidikan_LOKAKARYA TPK 2024.pptx.pdfPaparan Kurikulum Satuan Pendidikan_LOKAKARYA TPK 2024.pptx.pdf
Paparan Kurikulum Satuan Pendidikan_LOKAKARYA TPK 2024.pptx.pdf
 
Sapawarga - Manual Guide PPDB Tahun 2024.pdf
Sapawarga - Manual Guide PPDB Tahun 2024.pdfSapawarga - Manual Guide PPDB Tahun 2024.pdf
Sapawarga - Manual Guide PPDB Tahun 2024.pdf
 

12_Sinkronisasi.pdf

  • 1. Pemrog. Berorientasi Objek **, Pertemuan Ke-12 Noviyanto Halaman 1 Sinkronisasi Mengapa menggunakan sinkronisasi threads? Bagaimanapun juga sebuah thread yang berjalan bersama-sama kadang-kadang membutuhkan resource atau method dari luar Butuh untuk berkomunikasi satu dengan yang lain sehingga dapat mengetahui status dan aktifitas mereka Contoh: Permasalahan Produser-Konsumer 1 class TwoStrings { 2 static void print(String str1, String str2) { 3 System.out.print(str1); 4 try { 5 Thread.sleep(500); 6 } catch (InterruptedException ie) { 7 } 8 System.out.println(str2); 9 } 10 } 11 class PrintStringsThread implements Runnable { 12 Thread thread; 13 String str1, str2; 14 PrintStringsThread(String str1, String str2) { 15 this.str1 = str1; 16 this.str2 = str2; 17 thread = new Thread(this); 18 thread.start(); 19 } 20 public void run() { 21 TwoStrings.print(str1, str2); 22 } 23 } 24 class TestThread { 25 public static void main(String args[]) { 26 new PrintStringsThread("Hello ", "there."); 27 new PrintStringsThread("How are ", "you?"); 28 new PrintStringsThread("Thank you ", 29 "very much!"); 30 } 31 } Contoh hasil: Hello How are Thank you there. you? very much! Mengunci sebuah object: Untuk memastikan bahwa hanya satu thread yang mendapatkan hak akses kedalam method tertentu Java memperbolehkan penguncian terhadap sebuah object termasuk method-method-nya dengan menggunakan monitor Object tersebut akan menjalankan sebuah monitor implicit pada saat object dari method sinkronisasi dipanggil Sekali object tersebut dimonitor, monitor tersebut akan memastikan bahwa tidak ada thread yang akan mengakses object yang sama
  • 2. Pemrog. Berorientasi Objek **, Pertemuan Ke-12 Noviyanto Halaman 2 Sinkronisasi sebuah method: Menggunakan keyword synchronized Dapat menjadi header dari pendefinisian method Dapat mensinkronisasi object dimana method tersebut menjadi anggota dari synchronized (<object>) { //statements yang akan disinkronisasikan } Contoh Synchronized Pertama 1 class TwoStrings { 2 synchronized static void print(String str1, 3 String str2) { 4 System.out.print(str1); 5 try { 6 Thread.sleep(500); 7 } catch (InterruptedException ie) { 8 } 9 System.out.println(str2); 10 } 11 } 12 class PrintStringsThread implements Runnable { 13 Thread thread; 14 String str1, str2; 15 PrintStringsThread(String str1, String str2) { 16 this.str1 = str1; 17 this.str2 = str2; 18 thread = new Thread(this); 19 thread.start(); 20 } 21 public void run() { 22 TwoStrings.print(str1, str2); 23 } 24 } 25 class TestThread { 26 public static void main(String args[]) { 27 new PrintStringsThread("Hello ", "there."); 28 new PrintStringsThread("How are ", "you?"); 29 new PrintStringsThread("Thank you ", 30 "very much!"); 31 } 32 } Contoh Hasil: Hello there. How are you? Thank you very much!
  • 3. Pemrog. Berorientasi Objek **, Pertemuan Ke-12 Noviyanto Halaman 3 Contoh Synchronized Kedua 1 class TwoStrings { 2 static void print(String str1, String str2) { 3 System.out.print(str1); 4 try { 5 Thread.sleep(500); 6 } catch (InterruptedException ie) { 7 } 8 System.out.println(str2); 9 } 10 } 11 class PrintStringsThread implements Runnable { 12 Thread thread; 13 String str1, str2; 14 TwoStrings ts; 15 PrintStringsThread(String str1, String str2, 16 TwoStrings ts) { 17 this.str1 = str1; 18 this.str2 = str2; 19 this.ts = ts; 20 thread = new Thread(this); 21 thread.start(); 22 } 23 public void run() { 24 synchronized (ts) { 25 ts.print(str1, str2); 26 } 27 } 28 } 29 class TestThread { 30 public static void main(String args[]) { 31 TwoStrings ts = new TwoStrings(); 32 new PrintStringsThread("Hello ", "there.", ts); 33 new PrintStringsThread("How are ", "you?", ts); 34 new PrintStringsThread("Thank you ", 35 "very much!", ts); 36 }} Komunikasi Antar Thread: Methods Methods untuk komunikasi Interthread public final void wait() Menyebabkan thread ini menunggu sampai thread yang lain memanggil notify atau notifyAll method dari object ini. Hal ini dapat menyebabkan InterruptedException. public final void notify() Membangunkan thread yang telah memanggil method wait dari object yang sama. public final void notifyAll() Membangunkan semua thread yang telah memanggil method wait dari object yang sama.
  • 4. Pemrog. Berorientasi Objek **, Pertemuan Ke-12 Noviyanto Halaman 4 Komunikasi Antar Thread Contoh Produsen-Konsumen 1 class SharedData { 2 int data; 3 synchronized void set(int value) { 4 System.out.println("Generate " + value); 5 data = value; 6 } 7 synchronized int get() { 8 System.out.println("Get " + data); 9 return data; 10 } 11 } 12 class Producer implements Runnable { 13 SharedData sd; 14 Producer(SharedData sd) { 15 this.sd = sd; 16 new Thread(this, "Producer").start(); 17 } 18 public void run() { 19 for (int i = 0; i < 10; i++) { 20 sd.set((int)(Math.random()*100)); 21 } 22 } 23 }
  • 5. Pemrog. Berorientasi Objek **, Pertemuan Ke-12 Noviyanto Halaman 5 24 class Consumer implements Runnable { 25 SharedData sd; 26 Consumer(SharedData sd) { 27 this.sd = sd; 28 new Thread(this, "Consumer").start(); 29 } 30 public void run() { 31 for (int i = 0; i < 10 ; i++) { 32 sd.get(); 33 } 34 } 35 } 36 class TestProducerConsumer { 37 public static void main(String args[]) 38 throws Exception { 39 SharedData sd = new SharedData(); 40 new Producer(sd); 41 new Consumer(sd); 42 } 43 } Contoh hasil: Generate 8 Generate 45 Generate 52 Generate 65 Get 65 Generate 23 Get 23 Generate 49 Get 49 Generate 35 Get 35 Generate 39 Get 39 Generate 85 Get 85 Get 85 Get 85 Generate 35 Get 35 Get 35 Contoh Produsen-Konsumen yang telah diperbaiki 1 class SharedData { 2 int data; 3 boolean valueSet = false; 4 synchronized void set(int value) { 5 if (valueSet) { //hanya dihasilkan jika mempumyai sebuah nilai 6 try { 7 wait(); 8 } catch (InterruptedException ie) { 9 } 10 } 11 System.out.println("Generate " + value); 12 data = value; 13 valueSet = true; 14 notify(); 15 } 16 synchronized int get() { 17 if (!valueSet) { 18 //producer belum memiliki suatu nilai 19 try { 20 wait(); 21 } catch (InterruptedException ie) { 22 } 23 } 24 System.out.println("Get " + data); 25 valueSet = false; 26 notify(); 27 return data; 28 } 29 } 30 31 /* Bagian kode tertentu tidak berubah. */
  • 6. Pemrog. Berorientasi Objek **, Pertemuan Ke-12 Noviyanto Halaman 6 Contoh hasil: Generate 76 Get 76 Generate 25 Get 25 Generate 34 Get 34 Generate 84 Get 84 Generate 48 Get 48 Generate 29 Get 29 Generate 26 Get 26 Generate 86 Get 86 Generate 65 Get 65 Generate 38 Get 38 Generate 46 Get 46 Ringkasan Sinkronisasi Mengunci sebuah Object Keyword synchronized Method header Object Komunikasi Antar Thread (Interthread) Methods wait notify notifyAll