cari
RumahJavajavaTutorialBagaimana untuk menyelesaikan penyusunan semula arahan Java dalam persekitaran berbilang benang

1. Prakata

Penyusunan semula arahan akan membantu meningkatkan kecekapan pelaksanaan program dalam persekitaran satu utas dan tidak akan memberi kesan negatif kepada program dalam persekitaran berbilang benang, penyusunan semula arahan akan membawa maksud kepada program yang tidak dijangka.

2. Pemulihan masalah

(1) Pembolehubah bersekutu

Berikut ialah contoh yang boleh memulihkan penyusunan semula arahan 100%. Kaedah

public class D {
    static Integer a;
    static Boolean flag;
    
    public static void writer() {
        a = 1;
        flag = true;
    }
    
    public static void reader() {
        if (flag != null && flag) {
            System.out.println(a);
            a = 0;
            flag = false;
        }
    }
}
1. Ramalan keputusan

reader hanya mencetak nilai pembolehubah flag ke konsol apabila pembolehubah a adalah benar. Kaedah

writer mula-mula melaksanakan operasi penetapan pembolehubah a, dan kemudian melaksanakan operasi penetapan pembolehubah flag.

Jika anda mengikut logik analisis di atas, maka hasil yang dicetak oleh konsol mestilah semuanya 1.

2. Penyusunan semula arahan

Jika kod tidak mempunyai penyusunan semula arahan, maka apabila pembolehubah flag adalah benar, pembolehubah a mestilah 1.

Dalam kod di atas, terdapat penyusunan semula arahan dalam kedua-dua kelas kaedah berkenaan pembolehubah a dan pembolehubah flag.

public static void writer() {
    a = 1;
    flag = true;
}

Dengan memerhati keluaran log, kami mendapati terdapat sejumlah besar 0 keluaran.

Apabila penyusunan semula arahan berlaku di dalam kaedah writer, pembolehubah flag ditetapkan dahulu Pada masa ini, jika utas semasa terganggu dan utas lain memanggil kaedah reader, ia adalah. mengesan bahawa pembolehubah flag adalah benar, maka nilai pembolehubah a akan dicetak. Pada masa ini, terdapat hasil dalam konsol yang melebihi nilai yang dijangkakan.

(2) Baharu mencipta objek

Apabila menggunakan kata kunci baharu untuk mencipta objek, terdapat penyusunan semula arahan kerana operasi bukan atomnya penyusunan semula Arahan akan membawa kesan negatif dalam berbilang -persekitaran berulir.

public class Singleton {
    private static UserModel instance;
    
    public static UserModel getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new UserModel(2, "B");
                }
            }
        }
        return instance;
    }
}

@Data
@AllArgsConstructor
class UserModel {
    private Integer userId;
    private String userName;
}
1. Proses analisis dan penciptaan
  • Gunakan kata kunci baharu untuk mencipta objek, yang dibahagikan secara kasar kepada proses berikut:

  • Buat alamat rujukan dalam ruang tindanan

  • Gunakan fail kelas sebagai templat untuk memperuntukkan memori dalam objek ruang timbunan

  • Memulakan pembolehubah ahli

  • Gunakan pembina untuk memulakan

  • Tetapkan nilai rujukan kepada pembolehubah storan kiri

2. Analisis proses penyusunan semula

Untuk contoh di atas, anggapkan bahawa utas pertama memasuki blok kod yang disegerakkan dan mula mencipta objek Disebabkan wujudnya penyusunan semula, penciptaan objek biasa proses terganggu, yang mungkin berlaku selepas alamat rujukan dibuat dalam ruang tindanan , tetapkan nilai rujukan kepada pembolehubah storan kiri, dan kemudian gangguan berlaku disebabkan oleh kehabisan kepingan masa penjadualan CPU.

Apabila urutan berikutnya mengesan bahawa pembolehubah instance tidak kosong, ia akan digunakan secara langsung. Oleh kerana objek tunggal tidak dibuat seketika, menggunakannya secara langsung akan membawa hasil yang tidak dijangka.

3. Mengatasi penyusunan semula arahan

(1) AtomicReference kelas atom

Gunakan kelas atom untuk merangkum satu set pembolehubah yang berkaitan ke dalam objek, mengambil kesempatan daripada ciri-ciri operasi atom, dengan berkesan mengelakkan masalah penyusunan semula arahan.

@Data
@NoArgsConstructor
@AllArgsConstructor
public class ValueModel {
    private Integer value;
    private Boolean flag;
}

Kelas atom harus menjadi penyelesaian pilihan untuk menyusun semula arahan dalam persekitaran berbilang benang bukan sahaja mudah difahami, tetapi kunci mutex bukan berat yang digunakan antara benang adalah agak cekap.

public class E {
    private static final AtomicReference<ValueModel> ar = new AtomicReference<>(new ValueModel());
    
    public static void writer() {
        ar.set(new ValueModel(1, true));
    }
    
    public static void reader() {
        ValueModel valueModel = ar.get();
        if (valueModel.getFlag() != null && valueModel.getFlag()) {
            System.out.println(valueModel.getValue());
            ar.set(new ValueModel(0, false));
        }
    }
}

Apabila arahan disusun semula untuk sekumpulan pembolehubah yang berkaitan, menggunakan kelas operasi atom ialah penyelesaian yang lebih baik.

(2) kata kunci yang tidak menentu

public class Singleton {
    private volatile static UserModel instance;
    
    public static UserModel getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new UserModel(2, "B");
                }
            }
        }
        return instance;
    }
}

@Data
@AllArgsConstructor
class UserModel {
    private Integer userId;
    private String userName;
}

4. Pengertian penyusunan semula arahan

1 tidak terhad kepada program Java Malah, pelbagai penyusun mempunyai operasi penyusunan semula arahan, daripada perisian kepada perkakasan CPU. Penyusunan semula arahan ialah pengoptimuman prestasi untuk atur cara berbenang tunggal. Ia harus jelas bahawa penyusunan semula arahan tidak akan mengubah hasil yang dijangkakan bagi pelaksanaan program berurutan dalam persekitaran berbenang tunggal.

2. Penyusunan semula arahan dalam persekitaran berbilang benang

Penyusunan semula arahan yang dibincangkan di atas dalam dua persekitaran berbilang benang biasa, menganalisis kesan negatifnya dan menyediakan langkah balas masing-masing.

    Untuk pembolehubah yang berkaitan, mula-mula masukkannya ke dalam objek, dan kemudian gunakan kelas atom untuk mengendalikan
  • Untuk objek baharu, gunakan kata kunci yang tidak menentu untuk mengubah suai sasaran Objek boleh menjadi
  • 3. Kunci disegerakkan tidak ada kaitan dengan penyusunan semula

Kunci disegerakkan memastikan bahawa benang mengakses blok kod tertentu dengan teratur melalui kunci pengecualian bersama. Kod di dalam blok kod biasanya disusun semula mengikut strategi yang dilaksanakan oleh pengkompil.

Walaupun kunci yang disegerakkan boleh mengelakkan kesan buruk penyusunan semula dalam persekitaran berbilang benang, overhed benang yang disebabkan oleh kunci mutex adalah agak besar dan tidak disyorkan.

Operasi bukan atom dalam blok yang disegerakkan masih boleh menyebabkan penyusunan semula arahan

Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan penyusunan semula arahan Java dalam persekitaran berbilang benang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Artikel ini dikembalikan pada:亿速云. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Bagaimanakah saya menggunakan Maven atau Gradle untuk Pengurusan Projek Java Lanjutan, Membina Automasi, dan Resolusi Ketergantungan?Bagaimanakah saya menggunakan Maven atau Gradle untuk Pengurusan Projek Java Lanjutan, Membina Automasi, dan Resolusi Ketergantungan?Mar 17, 2025 pm 05:46 PM

Artikel ini membincangkan menggunakan Maven dan Gradle untuk Pengurusan Projek Java, membina automasi, dan resolusi pergantungan, membandingkan pendekatan dan strategi pengoptimuman mereka.

Bagaimanakah saya membuat dan menggunakan perpustakaan Java Custom (fail JAR) dengan pengurusan versi dan pergantungan yang betul?Bagaimanakah saya membuat dan menggunakan perpustakaan Java Custom (fail JAR) dengan pengurusan versi dan pergantungan yang betul?Mar 17, 2025 pm 05:45 PM

Artikel ini membincangkan membuat dan menggunakan perpustakaan Java tersuai (fail balang) dengan pengurusan versi dan pergantungan yang betul, menggunakan alat seperti Maven dan Gradle.

Bagaimanakah saya melaksanakan caching pelbagai peringkat dalam aplikasi java menggunakan perpustakaan seperti kafein atau cache jambu?Bagaimanakah saya melaksanakan caching pelbagai peringkat dalam aplikasi java menggunakan perpustakaan seperti kafein atau cache jambu?Mar 17, 2025 pm 05:44 PM

Artikel ini membincangkan pelaksanaan caching pelbagai peringkat di Java menggunakan kafein dan cache jambu untuk meningkatkan prestasi aplikasi. Ia meliputi persediaan, integrasi, dan faedah prestasi, bersama -sama dengan Pengurusan Dasar Konfigurasi dan Pengusiran PRA Terbaik

Bagaimanakah saya boleh menggunakan JPA (Java Constence API) untuk pemetaan objek-objek dengan ciri-ciri canggih seperti caching dan malas malas?Bagaimanakah saya boleh menggunakan JPA (Java Constence API) untuk pemetaan objek-objek dengan ciri-ciri canggih seperti caching dan malas malas?Mar 17, 2025 pm 05:43 PM

Artikel ini membincangkan menggunakan JPA untuk pemetaan objek-relasi dengan ciri-ciri canggih seperti caching dan pemuatan malas. Ia meliputi persediaan, pemetaan entiti, dan amalan terbaik untuk mengoptimumkan prestasi sambil menonjolkan potensi perangkap. [159 aksara]

Bagaimanakah mekanisme kelas muatan Java berfungsi, termasuk kelas yang berbeza dan model delegasi mereka?Bagaimanakah mekanisme kelas muatan Java berfungsi, termasuk kelas yang berbeza dan model delegasi mereka?Mar 17, 2025 pm 05:35 PM

Kelas kelas Java melibatkan pemuatan, menghubungkan, dan memulakan kelas menggunakan sistem hierarki dengan bootstrap, lanjutan, dan pemuat kelas aplikasi. Model delegasi induk memastikan kelas teras dimuatkan dahulu, yang mempengaruhi LOA kelas tersuai

See all articles

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

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

MantisBT

MantisBT

Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

VSCode Windows 64-bit Muat Turun

VSCode Windows 64-bit Muat Turun

Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

SublimeText3 versi Inggeris

SublimeText3 versi Inggeris

Disyorkan: Versi Win, menyokong gesaan kod!

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Persekitaran pembangunan bersepadu PHP yang berkuasa