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 :
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 :
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.
Di dalam method main kita instansi objek app , lalu kita memanggil method mulaiKerja().
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().
2. Kalian bisa perhatikan contoh code ,beserta penjelasanya di bawah :
Contoh Code :
Penjelasan :
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.
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.
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 (source) |
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"
Silakan berkomentar dengan baik ,jangan SPAM di komentar ini . NO BACKLINK /LINK HIDUP