Rumah >Java >javaTutorial >Bagaimanakah Pembolehubah Meruap dan Statik Berbeza dalam Aplikasi Java Berbilang Thread?
Meruap dan statik ialah dua pengubah suai penting dalam Java yang memainkan peranan penting dalam mengurus perkongsian nilai merentas rangkaian berbeza dan objek. Walaupun kedua-duanya mempengaruhi skop pembolehubah, implikasinya untuk aplikasi berbilang benang adalah berbeza.
Mengisytiharkan pembolehubah sebagai statik memastikan hanya satu salinan pembolehubah wujud, tanpa mengira daripada bilangan kejadian kelas yang dibuat. Ini bermakna semua benang dan objek mengakses salinan pembolehubah statik yang dikongsi yang sama. Walau bagaimanapun, urutan mungkin mengekalkan salinan cache setempat bagi nilai pembolehubah statik.
Tidak seperti pembolehubah statik, apabila pembolehubah diisytiharkan tidak menentu tetapi tidak statik, setiap objek mempunyai salinan pembolehubahnya sendiri. Sekali imbas, ini kelihatan serupa dengan pembolehubah biasa. Walau bagaimanapun, pembolehubah tidak menentu juga menghalang urutan daripada menyimpan nilainya secara setempat.
Dalam persekitaran berbilang benang, potensi nilai cache menimbulkan cabaran. Jika dua utas mengemas kini pembolehubah objek yang sama secara serentak tanpa pembolehubah diisytiharkan tidak menentu, satu utas mungkin mempunyai nilai cache yang lapuk.
Untuk mengelakkan isu ini, mengisytiharkan pembolehubah sebagai statik tidak menentu memaksa utas membaca global nilai secara langsung, menghapuskan kemungkinan caching.
Walaupun tidak menentu memastikan keterlihatan benang bagi nilai pembolehubah, ia bukan pengganti penyegerakan yang betul. Sebagai contoh, kod berikut mungkin masih membawa kepada keputusan yang salah disebabkan keadaan perlumbaan:
private static volatile int counter = 0; private void concurrentMethodWrong() { counter = counter + 5; // do something counter = counter - 5; }
Untuk menyelesaikan isu sedemikian, adalah penting untuk melaksanakan mekanisme penyegerakan, seperti kunci atau kelas AtomicInteger, untuk memastikan atom kemas kini kepada pembolehubah kongsi.
Atas ialah kandungan terperinci Bagaimanakah Pembolehubah Meruap dan Statik Berbeza dalam Aplikasi Java Berbilang Thread?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!