Saya baru sahaja menonton pengaturcaraan serentak praktikal hari ini tentang pelepasan selamat dan akses objek boleh ubah: Keluaran selamat:
Mulakan rujukan objek dalam fungsi permulaan statik;
Simpan rujukan objek pada volatile atau AtomicReference
Simpan rujukan objek kepada jenis akhir yang membina objek dengan betul
Simpan objek dalam skop kunci.
Akses selamat:
Benang ditutup
Perkongsian baca sahaja
Perkongsian selamat benang, kaedah akses dalaman objek yang diterbitkan adalah selamat benang dan tiada penyegerakan luaran diperlukan
Lindungi objek, terbitkan objek boleh ubah dengan mengehadkan akses luaran dan nyatakan antara muka untuk mengakses objek boleh ubah.
Ini telah mematuhi peraturan pertama penerbitan selamat
Kemudian kita mesti memastikan akses selamat Memandangkan senarai itu tidak boleh diakses dengan selamat dalam tiga situasi pertama, kita hanya boleh bergantung pada menyekat dunia luar apabila. menerbitkan objek, iaitu mengunci. static List<String> arrayList = new ArrayList<>();
Ia boleh direalisasikan mengikut permintaan subjek, tetapi realisasi permintaan ini sangat pelik.
private static void test1(final int i) {
new Thread(new Runnable() {
@Override
public void run() {
synchronized (arrayList) {
while (arrayList.size() != i) {
try {
arrayList.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
arrayList.add(i, i + "position");
arrayList.notifyAll();
}
}
}).start();
}
Selain kaedah ini, ia juga boleh dicapai melalui join dan lulus countdownlatch Jika anda benar-benar ingin menjadi seperti subjek, lebih baik tidak menggunakan multi-threading
Menggunakan kaedah invokeAll bagi kumpulan benang boleh memastikan bahawa susunan keputusan adalah konsisten dengan susunan parameter yang diluluskan dalam
Gunakan
synchronized
kata kunciTambahkan kata kunci yang tidak menentu pada senarai
Saya baru sahaja menonton pengaturcaraan serentak praktikal hari ini tentang pelepasan selamat dan akses objek boleh ubah:
Keluaran selamat:
Mulakan rujukan objek dalam fungsi permulaan statik;
Benang ditutup
Perkongsian baca sahaja
Perkongsian selamat benang, kaedah akses dalaman objek yang diterbitkan adalah selamat benang dan tiada penyegerakan luaran diperlukan
Lindungi objek, terbitkan objek boleh ubah dengan mengehadkan akses luaran dan nyatakan antara muka untuk mengakses objek boleh ubah.-
Ini telah mematuhi peraturan pertama penerbitan selamatKemudian kita mesti memastikan akses selamat Memandangkan senarai itu tidak boleh diakses dengan selamat dalam tiga situasi pertama, kita hanya boleh bergantung pada menyekat dunia luar apabila. menerbitkan objek, iaitu mengunci.
static List<String> arrayList = new ArrayList<>();
Ia boleh direalisasikan mengikut permintaan subjek, tetapi realisasi permintaan ini sangat pelik.
Selain kaedah ini, ia juga boleh dicapai melalui
join
dan luluscountdownlatch
Jika anda benar-benar ingin menjadi seperti subjek, lebih baik tidak menggunakan multi-threadingMenggunakan kaedah invokeAll bagi kumpulan benang boleh memastikan bahawa susunan keputusan adalah konsisten dengan susunan parameter yang diluluskan dalam