Sebagai contoh, jika saya ingin menulis corak tunggal, saya tidak akan menggunakan kaedah penyegerakan yang disegerakkan, tetapi menggunakan pengubahsuaian yang tidak menentu
Sigleton() persendirian{
}
Sigleton s tidak menentu statik peribadi = batal;
Sigleton statik awam getInstance(){
if (s==null){
s= new Singleton();
}
return s;
}
Bolehkah ini menyelesaikan masalah keselamatan benang?
Cara memahami keterlihatan benang
Jika saya mempunyai dua utas masuk pada masa yang sama jika s==null, bukankah dua objek sigleton baharu akan dicipta pada akhirnya?
Jika overhed baharu adalah sangat kecil, tidak mengapa untuk anda menulis seperti ini. Tetapi jika overhed permulaan adalah tinggi, anda masih perlu menggunakan disegerakkan. kunci yang ditanda dua kali tipikal ditulis seperti ini:
Fahami model ingatan dahulu.
Benang tidak mengubah suai terus pembolehubah dalam ingatan utama, tetapi mula-mula menulis memori kerjanya sendiri, dan kemudian menyegerakkannya ke ingatan utama Jika ia belum disegerakkan, utas lain tidak akan melihat pengubahsuaian (mereka masih melihatnya cache memori kerja sendiri).