Belajar Memakai Keyword Synchronized Di Bahasa Aktivitas 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 sanggup memakai keyword ini , pada method yang kita deklarasikan dalam suatu class. Berdasarkan dokumentasi resmi oracle (disini) , method yang memakai keyword synchronized , sanggup mencegah gangguan pada thread , dan juga kesalahan konsistensi memori. Pada artikel berguru java kali ini ,kita akan mencoba berguru mengenal pola penggunaan keyword synchronized , di bahasa pemrograman java .Selengkapnya berikut mari kita simak lebih lanjut :
 yang terdapat di bahasa pemrograman java  Belajar Menggunakan Keyword Synchronized di Bahasa Program Java

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

2. Kalian sanggup perhatikan pola code ,beserta penjelasanya di bawah :

Contoh Code :
 yang terdapat di bahasa pemrograman java  Belajar Menggunakan Keyword Synchronized di Bahasa Program Java
Contoh code

Output :

 yang terdapat di bahasa pemrograman java  Belajar Menggunakan Keyword Synchronized di Bahasa Program Java
Output hasil

Penjelasan :

Pada pola code kegiatan di atas ,kita akan mencoba memakai keyword synchronized,  pada method .increment() , yang didalamnya kita mendeklarasikan variable count dengan increment.

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

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

Kemudian , untuk mulai mengeksekusi kedua objek thread tersebut , kita memakai method .start()
Pada baris code berikutnya ,untuk mengatur alur thread,  kita memakai method .join(), yang akan menunggu thread , hingga finish atau akibat dihukum , gres kemudian thread berikutnya , akan mulai berjalan. Disini kita juga wajib memakai block  try catch exception.

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

Setelah itu ,kita tampilkan output hasilnya.
Seperti yang kalian lihat output hasil di atas , ketika kita memakai keyword synchronized  di method .increment() , ketika kita menjalankan kegiatan beberapa kali , kesudahannya akan konsisten menampilkan nilai variable count = 2000.
Berbeda ,jika kita tidak memakai synchronized method .increment() ,  hasilnya tidak akan konsisten menampilkan nilai variable count = 2000 , sehabis kita menjalankan kegiatan beberapa kali.

Konsep lock di java :
Berdasarkan dokumentasi oracle (disini) , sebelum memanggil method .increement(), satu thread harus mempunyai intrinsic lock , yang menjadi problem ialah , hanya satu thread yang sanggup memperoleh intrinsic lock , pada dikala yang bersamaaan.

Jika satu thread  mendapatkanya , maka intrinsic lock yang menjalankan method increement() , dan jikalau thread kedua pada dikala yang sama , mencoba memanggil method increement()  , maka thread kedua hanya sanggup menunggu. 

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

Kaprikornus setiap objek mempunyai satu instrinsic lock , dan hanya satu thread yang sanggup memperolehnya pada waktu tertentu.
Serta method yang ditandai dengan keyword synchronized , yaitu method .increement(),  hanya sanggup dipanggil , ketika satu thread memperoleh instrinsic lock.

Untuk itulah , kita sanggup memecahkan problem tersebut , yaitu tidak konsistennya nilai yang ditampilkan di variable count.
Contoh ilustrasinya , menyerupai pada gambar di bawah :
 yang terdapat di bahasa pemrograman java  Belajar Menggunakan Keyword Synchronized di Bahasa Program Java
Contoh gambaran proses kerja instrinsik lock dan keyword synchronized (source)
 yang terdapat di bahasa pemrograman java  Belajar Menggunakan Keyword Synchronized di Bahasa Program Java
Contoh gambaran monitor java (source)
Point :

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


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