Belajar Memakai Keyword Synchronized Di Bahasa Kegiatan 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 referensi 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 sanggup perhatikan referensi code ,beserta penjelasanya di bawah :
Pada referensi code jadwal 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.
Di dalam method main kita instansi objek app , kemudian kita memanggil method mulaiKerja().
Jika satu thread mendapatkanya , maka intrinsic lock yang menjalankan method increement() , dan bila thread kedua pada ketika 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().
2. Kalian sanggup perhatikan referensi code ,beserta penjelasanya di bawah :
Contoh Code :
Penjelasan :
Lalu kita memakai anonymous class , dari objek Runnable, yang akan mengoverride method run(). Di dalam method tersebut , kita memakai looping for , untuk menawarkan 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 jawaban dihukum , gres kemudian thread berikutnya , akan mulai berjalan. Disini kita juga wajib memakai block try catch exception.
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 jadwal beberapa kali , karenanya akan konsisten menampilkan nilai variable count = 2000.
Berbeda ,jika kita tidak memakai synchronized method .increment() , hasilnya tidak akan konsisten menampilkan nilai variable count = 2000 , sesudah kita menjalankan jadwal beberapa kali.
Konsep lock di java :
Berdasarkan dokumentasi oracle (disini) , sebelum memanggil method .increement(), satu thread harus mempunyai intrinsic lock , yang menjadi problem yaitu , hanya satu thread yang sanggup memperoleh intrinsic lock , pada ketika yang bersamaaan.
Thread kedua sementara akan membisu menunggu , hingga thread pertama melepaskan intrinsic lock dengan method finishing ,yaitu method .join().
Makara 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 , ibarat pada gambar di bawah :
Contoh gambaran proses kerja instrinsik lock dan keyword synchronized (source) |
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 referensi hubungan happen-before , yang akan memastikan bahwa perubahan apa pun yang dilakukan oleh satu thread , akan terlihat oleh thread lain
Belum ada Komentar untuk "Belajar Memakai Keyword Synchronized Di Bahasa Kegiatan Java"
Posting Komentar