Skip to content Skip to sidebar Skip to footer

Belajar Menggunakan Keyword Synchronized di Bahasa Program Java

Apa itu Synchronized ? synchronized merupakan salah satu jenis keyword , yang terdapat di bahasa pemrograman java ,yang dimana fungsinya sebagai thread-safe. Dimana pada waktu yang bersamaan , thread yang berbeda-beda , membaca dan menulis pada variable ,objek , dan resource yang sama.

Kita dapat menggunakan keyword ini , pada method yang kita deklarasikan dalam suatu class. Berdasarkan dokumentasi resmi oracle (disini) , method yang menggunakan keyword synchronized , dapat mencegah gangguan pada thread , dan juga kesalahan konsistensi memori. Pada artikel belajar java kali ini ,kita akan mencoba belajar mengenal contoh penggunaan keyword synchronized , di bahasa pemrograman java .Selengkapnya berikut mari kita simak lebih lanjut :



belajar contoh program penggunaan menggunakan keyword fungsi synchronized di bahasa program java


1. Pertama buka IntelliJ IDEA ,atau Software IDE lain yang kalian gunakan , di Komputer atau Laptop kalian.


2. Kalian bisa perhatikan contoh code ,beserta penjelasanya di bawah :


Contoh Code :


contoh code kode program yang menggunakan fungsi keyword synchronized di java
Contoh code

Output :


Output hasil contoh code kode program yang menggunakan fungsi keyword synchronized di java
Output hasil

Penjelasan :

Pada contoh code program di atas ,kita akan mencoba menggunakan keyword synchronized,  pada method .increment() , yang didalamnya kita mendeklarasikan variable count dengan increment.

Selanjutnya , kita membuat method mulaiKerja() , yang di dalamnya kita menginstansi objek t1 dan t2 , dari class Thread.

Lalu kita menggunakan anonymous class , dari objek Runnable, yang akan mengoverride method run(). Di dalam method tersebut , kita menggunakan looping for , untuk memberikan nilai pada variable count , di dalam method .increment() .

Kemudian , untuk mulai mengeksekusi kedua objek thread tersebut , kita menggunakan method .start()

Pada baris code berikutnya ,untuk mengatur alur thread,  kita menggunakan method .join(), yang akan menunggu thread , sampai finish atau selesai dieksekusi , baru kemudian thread berikutnya , akan mulai berjalan. Disini kita juga wajib menggunakan block  try catch exception.


Di dalam method main kita instansi objek app , lalu kita memanggil method mulaiKerja().

Setelah itu ,kita tampilkan output hasilnya.

Seperti yang kalian lihat output hasil di atas , ketika kita menggunakan keyword synchronized  di method .increment() , ketika kita menjalankan program beberapa kali , hasilnya akan konsisten menampilkan nilai variable count = 2000.

Berbeda ,jika kita tidak menggunakan synchronized method .increment() ,  hasilnya tidak akan konsisten menampilkan nilai variable count = 2000 , setelah kita menjalankan program beberapa kali.

Konsep lock di java :

Berdasarkan dokumentasi oracle (disini) , sebelum memanggil method .increement(), satu thread harus mempunyai intrinsic lock , yang menjadi masalah adalah , hanya satu thread yang dapat memperoleh intrinsic lock , pada saat yang bersamaaan.

Jika satu thread  mendapatkanya , maka intrinsic lock yang menjalankan method increement() , dan jika thread kedua pada saat yang sama , mencoba memanggil method increement()  , maka thread kedua hanya bisa menunggu. 

Thread kedua sementara akan diam menunggu , sampai thread pertama melepaskan intrinsic lock  dengan method finishing ,yaitu method .join().

Jadi setiap objek memiliki satu instrinsic lock , dan hanya satu thread yang dapat memperolehnya pada waktu tertentu.

Serta method yang ditandai dengan keyword synchronized , yaitu method .increement(),  hanya dapat dipanggil , ketika satu thread memperoleh instrinsic lock.


Untuk itulah , kita bisa memecahkan masalah tersebut , yaitu tidak konsistennya nilai yang ditampilkan di variable count.

Contoh ilustrasinya , seperti pada gambar di bawah :

Contoh ilustrasi proses kerja instrinsik lock dan keyword synchronized java
Contoh ilustrasi proses kerja instrinsik lock dan keyword synchronized (source)



Contoh ilustrasi monitor java
Contoh ilustrasi monitor java (source)

Point :

Metode synchronized  digunakan untuk mengunci objek , pada setiap resource yang dipakai bersama.
Ketika sebuah thread memanggil metode dengan keyword synchronized, secara otomatis memperoleh kunci untuk objek itu , dan melepaskannya ketika thread menyelesaikan tugasnya.


Ini merupakan salah satu contoh hubungan happen-before , yang  akan memastikan bahwa perubahan apa pun yang dilakukan oleh satu thread ,  akan terlihat oleh thread lain


Post a Comment for "Belajar Menggunakan Keyword Synchronized di Bahasa Program Java"