Rumah  >  Artikel  >  Java  >  Analisis peranan dan syarat yang boleh digunakan bagi kata kunci yang tidak menentu dalam Java

Analisis peranan dan syarat yang boleh digunakan bagi kata kunci yang tidak menentu dalam Java

WBOY
WBOYasal
2024-01-30 08:40:051260semak imbas

Analisis peranan dan syarat yang boleh digunakan bagi kata kunci yang tidak menentu dalam Java

Terokai peranan dan senario penggunaan kata kunci yang tidak menentu dalam Java

Di Jawa, kami sering menggunakan kata kunci untuk mengawal isu seperti keterlihatan pembolehubah, penyegerakan benang dan keterlihatan memori, dan salah satu kata kunci Ia tidak menentu. Kata kunci yang tidak menentu boleh memastikan keterlihatan dan susunan pembolehubah yang diubah suai Fungsinya adalah untuk menghalang penyusunan semula arahan dan memastikan keatoman operasi benang pada pembolehubah.

1. Peranan kata kunci yang tidak menentu

  1. Keterlihatan: Apabila benang mengubah suai nilai pembolehubah yang tidak menentu, urutan lain boleh melihat perubahan dengan serta-merta.
  2. Pemesanan: Kata kunci yang tidak menentu boleh menghalang penyusunan semula arahan dan memastikan susunan operasi.
  3. Lumpuhkan penyusunan semula arahan: Di Java, untuk meningkatkan kecekapan program berjalan, pengkompil dan pemproses akan menyusun semula arahan. Dengan menggunakan kata kunci yang tidak menentu, anda boleh melarang penyusunan semula arahan untuk memastikan susunan operasi.

2. menentukan sama ada untuk melakukan operasi dengan menyemak bit bendera. Jika pembolehubah bendera tidak diubah suai dengan kata kunci yang tidak menentu, utas B mungkin tidak serta-merta melihat pengubahsuaian bendera oleh utas A, yang membawa kepada keputusan yang salah. Jadi, dalam kes ini, kita boleh menggunakan kata kunci yang tidak menentu untuk memastikan keterlihatan pembolehubah dan mengelakkan persaingan dan konflik antara utas.

  1. Kod sampel adalah seperti berikut:
    public class VolatileExample {
        private volatile boolean flag = false;
    
        public void setFlag() {
            flag = true;
        }
    
        public void doSomething() {
            while (!flag) {
                // do something
            }
            System.out.println("Flag has been set to true");
        }
    
        public static void main(String[] args) {
            VolatileExample example = new VolatileExample();
            new Thread(() -> example.setFlag()).start();
            new Thread(() -> example.doSomething()).start();
        }
    }
  2. Jalankan kod di atas, utas B akan menunggu dalam gelung sehingga utas A menetapkan bendera bendera kepada benar, dan kemudian pelaksanaan akan diteruskan.

mod penguncian semak dua kali

Dalam persekitaran berbilang benang, kami sering menggunakan mod penguncian semak dua kali untuk memastikan keunikan sumber tertentu, dengan itu meningkatkan kecekapan program. Dalam mod ini, kami akan menggunakan pembolehubah yang tidak menentu untuk memastikan keterlihatan sumber dan menggunakan kata kunci yang disegerakkan untuk memastikan penyegerakan. Ini mengelakkan operasi penyegerakan yang tidak perlu apabila bit bendera tidak batal.

  1. Kod sampel adalah seperti berikut:
    public class Singleton {
        private volatile static Singleton instance;
    
        private Singleton() {}
    
        public static Singleton getInstance() {
            if (instance == null) {
                synchronized (Singleton.class) {
                    if (instance == null) {
                        instance = new Singleton();
                    }
                }
            }
            return instance;
        }
    }
  2. Dalam kod di atas, jika kata kunci yang tidak menentu tidak digunakan untuk mengubah suai pembolehubah instance, maka selepas thread A melaksanakan segerak (Singleton.class), thread B boleh menilai dengan null dan terus mendapatkan contoh Tidak Dimulakan.

Ringkasan:

Kata kunci yang tidak menentu ialah mekanisme penyegerakan benang dalam Java yang digunakan untuk memastikan keterlihatan dan keteraturan pembolehubah sambil melarang penyusunan semula arahan. Senario penggunaan utama termasuk: bendera status dan mod kunci yang disemak dua kali. Apabila menggunakan kata kunci yang tidak menentu, anda perlu memberi perhatian untuk memastikan penggunaan pembolehubah yang munasabah dan cuba mengelakkan penyegerakan dan persaingan yang tidak perlu, dengan itu meningkatkan kecekapan dan prestasi program.

Atas ialah kandungan terperinci Analisis peranan dan syarat yang boleh digunakan bagi kata kunci yang tidak menentu dalam Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn