Saya tahu bahwa menggunakan synchronize
kata kunci sebelum metode membawa sinkronisasi ke objek itu. Artinya, 2 utas yang menjalankan contoh objek yang sama akan disinkronkan.
Namun, karena sinkronisasi berada di level objek, 2 utas yang menjalankan instance objek yang berbeda tidak akan disinkronkan. Jika kita memiliki variabel statis di kelas Java yang dipanggil oleh metode, kita ingin itu disinkronkan di seluruh instance kelas. Kedua contoh tersebut berjalan di 2 utas berbeda.
Bisakah kita mencapai sinkronisasi dengan cara berikut?
public class Test
{
private static int count = 0;
private static final Object lock= new Object();
public synchronized void foo()
{
synchronized(lock)
{
count++;
}
}
}
Apakah benar bahwa karena kita telah mendefinisikan objek lock
yang statis dan kita menggunakan kata kunci synchronized
untuk kunci itu, variabel statis count
sekarang disinkronkan di seluruh kelas Test
?