Saya tahu bahwa dengan menggunakan sinkronisasi
kata kunci sebelum membawa metode sinkronisasi untuk objek tersebut. Artinya, 2 benang menjalankan instance dari objek yang akan disinkronkan.
Namun, sejak sinkronisasi di tingkat objek, 2 benang menjalankan contoh yang berbeda dari objek tidak akan disinkronkan. Jika kita memiliki sebuah variabel statis di kelas Java yang disebut dengan metode ini, kita akan seperti itu harus disinkronkan di contoh dari kelas. Dua kasus yang sedang berjalan di 2 benang yang berbeda.
Kita dapat mencapai sinkronisasi dengan cara sebagai berikut?
public class Test
{
private static int count = 0;
private static final Object lock= new Object();
public synchronized void foo()
{
synchronized(lock)
{
count++;
}
}
}
Adalah benar bahwa karena kita telah mendefinisikan objek kunci
yang statis dan kita menggunakan kata kunci sinkron
untuk kunci, statis variabel jumlah
sekarang disinkronkan di contoh dari kelas Test
?
Ada beberapa cara untuk melakukan sinkronisasi akses ke sebuah variabel statis.
public class Test { private static int count = 0;
public static synchronized void incrementCount() { count++; } }
public class Test { private static int count = 0;
public void incrementCount() { disinkronkan (Test.class) { count++; } } }
public class Test { private static int count = 0; private static final Objek countLock = new Object();
public void incrementCount() { disinkronkan (countLock) { count++; } } }
Metode 3 adalah yang terbaik dalam banyak kasus karena kunci objek tidak terkena di luar kelas.
Jika anda're hanya berbagi counter, pertimbangkan untuk menggunakan AtomicInteger atau yang lain sesuai kelas dari jawa.util.bersamaan.atom paket:
public class Test {
private final static AtomicInteger count = new AtomicInteger(0);
public void foo() {
count.incrementAndGet();
}
}
Anda dapat menyinkronkan kode di atas kelas. Itu akan menjadi sederhana.
public class Test
{
private static int count = 0;
private static final Object lock= new Object();
public synchronized void foo()
{
synchronized(Test.class)
{
count++;
}
}
}
Harap anda menemukan jawaban ini berguna.