Rumah Java javaTutorial Penjelasan terperinci tentang senario penggunaan dan fungsi kata kunci yang tidak menentu dalam Java

Penjelasan terperinci tentang senario penggunaan dan fungsi kata kunci yang tidak menentu dalam Java

Jan 30, 2024 am 10:01 AM
kesan Senario aplikasi volatile java multithreading

Penjelasan terperinci tentang senario penggunaan dan fungsi kata kunci yang tidak menentu dalam Java

Penjelasan terperinci tentang peranan dan senario aplikasi kata kunci yang tidak menentu dalam Java

1 Peranan kata kunci yang tidak menentu
Di Jawa, kata kunci yang tidak menentu digunakan untuk mengenal pasti pembolehubah yang boleh dilihat antara berbilang benang, iaitu. , untuk memastikan keterlihatan. Khususnya, apabila pembolehubah diisytiharkan tidak menentu, sebarang pengubahsuaian pada pembolehubah itu akan diketahui dengan serta-merta oleh rangkaian lain.

2. Senario aplikasi kata kunci yang tidak menentu

  1. Bendera status
    Kata kunci yang tidak menentu sesuai untuk beberapa senario bendera status, seperti satu urutan yang bertanggungjawab untuk memulakan dan menghentikan pelaksanaan urutan lain. Berikut ialah contoh:
public class FlagThread {
    private volatile boolean running = true;
    
    public void setRunning(boolean running) {
        this.running = running;
    }
    
    public void run() {
        while (running) {
            // 执行任务
        }
        // 停止执行
    }
    
    public static void main(String[] args) {
        FlagThread thread = new FlagThread();
        thread.start();
        
        // 模拟运行一段时间后停止执行
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        
        thread.setRunning(false);
    }
}
Salin selepas log masuk

Dalam kod di atas, pembolehubah berjalan dalam kelas FlagThread diisytiharkan tidak menentu. Apabila utas utama ditetapkan berjalan kepada false, utas FlagThread segera mengesannya dan menghentikan pelaksanaan.

  1. Penguncian yang disemak dua kali dalam mod tunggal
    Dalam sesetengah kes, kita perlu memastikan bahawa apabila berbilang benang mengakses pembolehubah pada masa yang sama, pembolehubah hanya dimulakan sekali. Berikut ialah contoh corak tunggal yang dilaksanakan menggunakan penguncian yang disemak dua kali:
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;
    }
}
Salin selepas log masuk

Dalam kod di atas, pembolehubah contoh diisytiharkan tidak menentu. Ini kerana dalam persekitaran berbilang benang, jika kata kunci yang tidak menentu tidak digunakan, disebabkan masalah penyusunan semula arahan, apabila berbilang benang mengakses kaedah getInstance pada masa yang sama, contoh yang dikembalikan bukanlah objek yang dimulakan sepenuhnya.

  1. Perkongsian data antara dua utas
    Dalam pengaturcaraan berbilang benang, kata kunci yang tidak menentu juga boleh digunakan untuk perkongsian data antara dua utas. Berikut ialah contoh:
public class SharedData {
    private volatile int data;
    
    public int getData() {
        return data;
    }
    
    public void setData(int data) {
        this.data = data;
    }
}

public class Producer implements Runnable {
    private SharedData sharedData;
    
    public Producer(SharedData sharedData) {
        this.sharedData = sharedData;
    }
    
    @Override
    public void run() {
        int value = 0;
        while (true) {
            sharedData.setData(value);
            value++;
        }
    }
}

public class Consumer implements Runnable {
    private SharedData sharedData;
    
    public Consumer(SharedData sharedData) {
        this.sharedData = sharedData;
    }
    
    @Override
    public void run() {
        while (true) {
            int value = sharedData.getData();
            System.out.println(value);
        }
    }
}

public class Main {
    public static void main(String[] args) {
        SharedData sharedData = new SharedData();
        Thread producerThread = new Thread(new Producer(sharedData));
        Thread consumerThread = new Thread(new Consumer(sharedData));
        
        producerThread.start();
        consumerThread.start();
    }
}
Salin selepas log masuk

Dalam kod di atas, utas Pengeluar secara berterusan menulis data kepada pembolehubah data objek sharedData, manakala utas Pengguna secara berterusan membaca data daripada pembolehubah data. Memandangkan pembolehubah data diisytiharkan tidak menentu, operasi tulis thread Producer kepada data kelihatan kepada thread Consumer.

3. Ringkasan
Kata kunci yang tidak menentu memainkan peranan penting dalam pengaturcaraan berbilang benang Java Ia digunakan untuk memastikan keterlihatan pembolehubah. Dalam sesetengah senario, kita perlu memastikan bahawa pengubahsuaian kepada pembolehubah antara berbilang utas dapat dilihat oleh utas lain Dalam kes ini, kata kunci yang tidak menentu boleh digunakan. Walau bagaimanapun, perlu diingatkan bahawa kata kunci yang tidak menentu hanya boleh menjamin keterlihatan, tetapi bukan keatoman pembolehubah Jika anda perlu memastikan keatoman, anda boleh mempertimbangkan untuk menggunakan kata kunci yang disegerakkan atau kelas Atom.

Atas ialah kandungan terperinci Penjelasan terperinci tentang senario penggunaan dan fungsi kata kunci yang tidak menentu dalam Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Analisis fungsi dan prinsip nohup Analisis fungsi dan prinsip nohup Mar 25, 2024 pm 03:24 PM

Analisis peranan dan prinsip nohup Dalam sistem pengendalian seperti Unix dan Unix, nohup ialah arahan yang biasa digunakan yang digunakan untuk menjalankan arahan di latar belakang Walaupun pengguna keluar dari sesi semasa atau menutup tetingkap terminal, arahan itu boleh masih terus dilaksanakan. Dalam artikel ini, kami akan menganalisis fungsi dan prinsip arahan nohup secara terperinci. 1. Peranan nohup: Menjalankan arahan di latar belakang: Melalui arahan nohup, kita boleh membiarkan arahan yang berjalan lama terus dilaksanakan di latar belakang tanpa terjejas oleh pengguna yang keluar dari sesi terminal. Ini perlu dijalankan

Fahami peranan dan penggunaan Linux DTS Fahami peranan dan penggunaan Linux DTS Mar 01, 2024 am 10:42 AM

Memahami peranan dan penggunaan LinuxDTS Dalam pembangunan sistem Linux terbenam, Device Tree (DeviceTree, singkatan DTS) ialah struktur data yang menerangkan peranti perkakasan dan hubungan sambungan dan atributnya dalam sistem. Pokok peranti membolehkan kernel Linux berjalan secara fleksibel pada platform perkakasan yang berbeza tanpa mengubah suai kernel. Dalam artikel ini, fungsi dan penggunaan LinuxDTS akan diperkenalkan, dan contoh kod khusus akan disediakan untuk membantu pembaca memahami dengan lebih baik. 1. Peranan pokok peranti pokok peranti

Bagaimana untuk memastikan keselamatan benang pembolehubah tidak menentu dalam fungsi Java? Bagaimana untuk memastikan keselamatan benang pembolehubah tidak menentu dalam fungsi Java? May 04, 2024 am 10:15 AM

Kaedah untuk memastikan keselamatan benang bagi pembolehubah tidak menentu di Jawa: Keterlihatan: Pastikan pengubahsuaian kepada pembolehubah tidak menentu oleh satu utas dapat dilihat dengan serta-merta kepada utas lain. Atomicity: Pastikan bahawa operasi tertentu pada pembolehubah tidak menentu (seperti menulis, membaca dan pertukaran perbandingan) tidak boleh dibahagikan dan tidak akan diganggu oleh urutan lain.

Terokai kepentingan dan peranan define function dalam PHP Terokai kepentingan dan peranan define function dalam PHP Mar 19, 2024 pm 12:12 PM

Kepentingan dan peranan fungsi define dalam PHP 1. Pengenalan asas kepada fungsi define Dalam PHP, fungsi define ialah fungsi utama yang digunakan untuk menentukan pemalar tidak akan mengubah nilainya semasa menjalankan program. Pemalar yang ditakrifkan menggunakan fungsi define boleh diakses di seluruh skrip dan bersifat global. 2. Sintaks fungsi define Sintaks asas fungsi define adalah seperti berikut: define("constant name","constant value&qu

PHP digunakan untuk apa? Terokai peranan dan fungsi PHP PHP digunakan untuk apa? Terokai peranan dan fungsi PHP Mar 24, 2024 am 11:39 AM

PHP ialah bahasa skrip bahagian pelayan yang digunakan secara meluas dalam pembangunan web Fungsi utamanya adalah untuk menjana kandungan web yang dinamik Apabila digabungkan dengan HTML, ia boleh mencipta halaman web yang kaya dan berwarna-warni. PHP berkuasa Ia boleh melaksanakan pelbagai operasi pangkalan data, operasi fail, pemprosesan borang dan tugas lain, menyediakan interaktiviti dan fungsi yang berkuasa untuk tapak web. Dalam artikel berikut, kami akan meneroka lebih lanjut peranan dan fungsi PHP, dengan contoh kod terperinci. Mula-mula, mari kita lihat penggunaan biasa PHP: penjanaan halaman web dinamik: P

Perbezaan antara Oracle dan SQL dan analisis senario aplikasi Perbezaan antara Oracle dan SQL dan analisis senario aplikasi Mar 08, 2024 pm 09:39 PM

Perbezaan antara Oracle dan SQL dan analisis senario aplikasi Dalam medan pangkalan data, Oracle dan SQL adalah dua istilah yang sering disebut. Oracle ialah sistem pengurusan pangkalan data hubungan (RDBMS), dan SQL (StructuredQueryLanguage) ialah bahasa piawai untuk mengurus pangkalan data hubungan. Walaupun mereka agak berkaitan, terdapat beberapa perbezaan yang ketara. Pertama sekali, mengikut definisi, Oracle ialah sistem pengurusan pangkalan data khusus, yang terdiri daripada

Analisis platform ECShop: penjelasan terperinci tentang ciri fungsi dan senario aplikasi Analisis platform ECShop: penjelasan terperinci tentang ciri fungsi dan senario aplikasi Mar 14, 2024 pm 01:12 PM

Analisis platform ECShop: Penjelasan terperinci tentang ciri fungsi dan senario aplikasi ECShop ialah sistem e-dagang sumber terbuka yang dibangunkan berdasarkan PHP+MySQL Ia mempunyai ciri fungsi yang berkuasa dan pelbagai senario aplikasi. Artikel ini akan menganalisis ciri fungsi platform ECShop secara terperinci, dan menggabungkannya dengan contoh kod khusus untuk meneroka aplikasinya dalam senario yang berbeza. Ciri-ciri 1.1 ECShop yang ringan dan berprestasi tinggi menggunakan reka bentuk seni bina yang ringan, dengan kod yang diperkemas dan cekap serta kelajuan larian yang pantas, menjadikannya sesuai untuk tapak web e-dagang bersaiz kecil dan sederhana. Ia mengamalkan corak MVC

Apakah senario aplikasi biasa bahasa Go? Apakah senario aplikasi biasa bahasa Go? Apr 03, 2024 pm 06:06 PM

Bahasa Go sesuai untuk pelbagai senario, termasuk pembangunan bahagian belakang, seni bina perkhidmatan mikro, pengkomputeran awan, pemprosesan data besar, pembelajaran mesin dan membina API RESTful. Antaranya, langkah mudah untuk membina API RESTful menggunakan Go termasuk: menyediakan penghala, mentakrifkan fungsi pemprosesan, mendapatkan data dan mengekodkannya ke dalam JSON dan menulis respons.

See all articles