Hal-hal yang perlu dipertimbangkan saat menulis kode thread-safe:
1. Variabel bersama
2. Variabel yang bisa berubah
Shared berarti beberapa thread dapat mengaksesnya secara bersamaan, dan mutable berarti nilainya dapat berubah selama siklus hidupnya.
Misalnya, variabel count berikut:
Copy kode kodenya sebagai berikut:
//Kelas tidak aman untuk thread
kelas publik UnsafeCount {
private int count = 0; //Variabel ini dibagikan
public void peningkatan() {//Tidak ada mekanisme sinkronisasi di sini, beberapa thread dapat mengakses secara bersamaan
count++; //Variabel ini adalah variabel
}
publik int getCount() {
jumlah pengembalian;
}
}
Ada 4 cara untuk memperbaiki masalah ini:
1. Daripada membagikan variabel status di antara thread, Anda dapat mengenkapsulasi variabel ke dalam metode (objek tanpa status harus aman untuk thread karena variabel dalam metode bersifat eksklusif untuk setiap thread dan tidak dibagikan dengan thread lain); Misalnya:
Copy kode kodenya sebagai berikut:
publik int tambahkan(jumlah int){
return ++count;//Dapat juga dikatakan di sini bahwa objek stateless harus aman untuk thread
}
2. Ubah variabel status menjadi variabel yang tidak dapat diubah.
Copy kode kodenya sebagai berikut:
jumlah int akhir pribadi = 0;
3. Gunakan strategi sinkronisasi saat mengakses variabel status.
Copy kode kodenya sebagai berikut:
peningkatan kekosongan yang disinkronkan publik() {
hitungan++;
}
4. Gunakan kelas variabel atom.
Copy kode kodenya sebagai berikut:
jumlah AtomicInteger pribadi;
peningkatan kekosongan publik() {
hitung.getAndAdd(1);
}