Rumah Java javaTutorial Bagaimana untuk menyelesaikan masalah penyegerakan benang dan pengecualian bersama di Jawa

Bagaimana untuk menyelesaikan masalah penyegerakan benang dan pengecualian bersama di Jawa

Oct 08, 2023 pm 05:16 PM
pengaturcaraan java Penyegerakan benang Masalah pengecualian bersama

Bagaimana untuk menyelesaikan masalah penyegerakan benang dan pengecualian bersama di Jawa

Bagaimana untuk menyelesaikan masalah penyegerakan benang dan pengecualian bersama dalam Java

Dalam pengaturcaraan berbilang benang Java, penyegerakan benang dan pengecualian bersama adalah satu tugas yang sangat penting. Tujuan penyegerakan benang adalah untuk memastikan berbilang benang dilaksanakan dalam susunan tertentu, manakala pengecualian bersama benang memastikan berbilang benang tidak mengakses atau mengubah suai sumber dikongsi pada masa yang sama. Mengendalikan isu penyegerakan benang dan pengecualian bersama dengan betul boleh mengelakkan banyak isu keselamatan benang dan meningkatkan prestasi dan kebolehpercayaan program.

Berikut akan memperkenalkan beberapa kaedah yang biasa digunakan untuk menyelesaikan masalah penyegerakan benang dan pengecualian bersama, dan memberikan contoh kod yang sepadan.

1 Gunakan kata kunci yang disegerakkan untuk mencapai penyegerakan benang

Kata kunci yang disegerakkan dalam Java boleh digunakan untuk mengubah suai kaedah atau blok kod untuk mencapai penyegerakan benang. Apabila benang memasuki kaedah diubah suai disegerakkan atau blok kod, ia memperoleh kunci objek yang sepadan, dan utas lain perlu menunggu kunci dilepaskan sebelum ia boleh meneruskan pelaksanaan. Berikut ialah contoh menggunakan kata kunci yang disegerakkan untuk mencapai penyegerakan benang:

public class SynchronizedExample {
    private int count = 0;
    
    public synchronized void increment() {
        count++;
    }
    
    public synchronized int getCount() {
        return count;
    }
}

public class Main {
    public static void main(String[] args) {
        SynchronizedExample example = new SynchronizedExample();
        
        // 创建两个线程并发执行
        Thread thread1 = new Thread(() -> {
            for (int i = 0; i < 1000; i++) {
                example.increment();
            }
        });
        
        Thread thread2 = new Thread(() -> {
            for (int i = 0; i < 1000; i++) {
                example.increment();
            }
        });
        
        thread1.start();
        thread2.start();
        
        try {
            thread1.join();
            thread2.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        
        System.out.println("Count: " + example.getCount());
    }
}
Salin selepas log masuk

Dalam contoh di atas, kata kunci yang disegerakkan digunakan untuk mengubah suai kaedah increment() dan getCount() untuk memastikan kiraan pembolehubah ditingkatkan dan operasi Baca adalah selamat untuk benang. Menjalankan program akan mengeluarkan Count: 2000, menunjukkan bahawa operasi kenaikan dua benang pada pembolehubah kiraan disegerakkan dengan betul.

2. Gunakan antara muka Lock and Condition untuk mencapai penyegerakan benang

Selain menggunakan kata kunci yang disegerakkan, Java juga menyediakan antara muka Kunci dan Keadaan untuk mencapai penyegerakan benang. Berbanding dengan kata kunci yang disegerakkan, antara muka Kunci dan Keadaan menyediakan kawalan yang lebih halus dan boleh mencapai penyegerakan benang dengan lebih fleksibel. Berikut ialah contoh menggunakan antara muka Kunci dan Syarat untuk melaksanakan penyegerakan benang:

import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class LockExample {
    private int count = 0;
    private Lock lock = new ReentrantLock();
    private Condition condition = lock.newCondition();
    
    public void increment() {
        lock.lock();
        try {
            count++;
            condition.signalAll();
        } finally {
            lock.unlock();
        }
    }
    
    public int getCount() {
        lock.lock();
        try {
            while (count < 1000) {
                condition.await();
            }
            return count;
        } catch (InterruptedException e) {
            e.printStackTrace();
        } finally {
            lock.unlock();
        }
        return -1;
    }
}

public class Main {
    public static void main(String[] args) {
        LockExample example = new LockExample();
        
        Thread thread1 = new Thread(() -> {
            for (int i = 0; i < 1000; i++) {
                example.increment();
            }
        });
        
        Thread thread2 = new Thread(() -> {
            for (int i = 0; i < 1000; i++) {
                example.increment();
            }
        });
        
        thread1.start();
        thread2.start();
        
        try {
            thread1.join();
            thread2.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        
        System.out.println("Count: " + example.getCount());
    }
}
Salin selepas log masuk

Dalam contoh di atas, antara muka Kunci dan Syarat digunakan untuk melaksanakan operasi penyegerakan pada pembolehubah kiraan. Dapatkan dan lepaskan kunci dengan memanggil kaedah lock() dan buka kunci(), dan tunggu dan bangunkan benang dengan memanggil kaedah await() dan signalAll(). Menjalankan program akan mengeluarkan Count: 2000, menunjukkan bahawa operasi kenaikan dua benang pada pembolehubah kiraan disegerakkan dengan betul.

Ringkasan

Terdapat banyak penyelesaian untuk masalah penyegerakan benang dan pengecualian bersama dalam Java Artikel ini memperkenalkan penggunaan kata kunci yang disegerakkan dan antara muka Kunci dan Syarat untuk mencapai penyegerakan benang . Apabila menggunakan kaedah ini, anda perlu mematuhi prinsip berikut:

  1. Cuba gunakan cara paling mudah untuk mencapai penyegerakan benang, seperti menggunakan kata kunci yang disegerakkan. Pertimbangkan untuk menggunakan antara muka Kunci dan Keadaan hanya apabila kawalan yang lebih terperinci diperlukan.
  2. Apabila menggunakan kata kunci yang disegerakkan, cuba gunakan kunci peringkat objek dan bukannya kunci peringkat kelas untuk mengelakkan overhed prestasi yang tidak perlu.
  3. Apabila menggunakan antara muka Kunci dan Keadaan, pastikan anda ingat untuk melepaskan kunci dalam blok akhirnya untuk memastikan kunci dilepaskan.

Dengan mengendalikan penyegerakan benang dan isu pengecualian bersama dengan betul, kami boleh mengelakkan banyak isu keselamatan benang yang berpotensi dan memastikan ketepatan dan kebolehpercayaan program. Pada masa yang sama, ia juga boleh meningkatkan prestasi dan keupayaan serentak program, menggunakan sepenuhnya sumber perkakasan pada pemproses berbilang teras, dan meningkatkan kecekapan pelaksanaan program.

Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan masalah penyegerakan benang dan pengecualian bersama di Jawa. 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

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)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

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)

Bagaimana untuk menulis penjana laporan prestasi pelajar yang mudah menggunakan Java? Bagaimana untuk menulis penjana laporan prestasi pelajar yang mudah menggunakan Java? Nov 03, 2023 pm 02:57 PM

Bagaimana untuk menulis penjana laporan prestasi pelajar yang mudah menggunakan Java? Penjana Laporan Prestasi Pelajar ialah alat yang membantu guru atau pendidik menjana laporan prestasi pelajar dengan cepat. Artikel ini akan memperkenalkan cara menggunakan Java untuk menulis penjana laporan prestasi pelajar yang mudah. Pertama, kita perlu menentukan objek pelajar dan objek gred pelajar. Objek pelajar mengandungi maklumat asas seperti nama pelajar dan nombor pelajar, manakala objek skor pelajar mengandungi maklumat seperti skor mata pelajaran pelajar dan gred purata. Berikut ialah definisi objek pelajar mudah: awam

Bagaimana untuk menulis sistem pengurusan kehadiran pelajar yang mudah menggunakan Java? Bagaimana untuk menulis sistem pengurusan kehadiran pelajar yang mudah menggunakan Java? Nov 02, 2023 pm 03:17 PM

Bagaimana untuk menulis sistem pengurusan kehadiran pelajar yang mudah menggunakan Java? Dengan perkembangan teknologi yang berterusan, sistem pengurusan sekolah juga sentiasa dikemas kini dan dinaik taraf. Sistem pengurusan kehadiran pelajar adalah bahagian penting daripadanya. Ia boleh membantu sekolah mengesan kehadiran pelajar dan menyediakan analisis data dan laporan. Artikel ini akan memperkenalkan cara menulis sistem pengurusan kehadiran pelajar yang mudah menggunakan Java. 1. Analisis Keperluan Sebelum mula menulis, kita perlu menentukan fungsi dan keperluan sistem. Fungsi asas termasuk pendaftaran dan pengurusan maklumat pelajar, merekod data kehadiran pelajar dan

Cara menangani penyegerakan benang dan isu akses serentak dalam pembangunan C# Cara menangani penyegerakan benang dan isu akses serentak dalam pembangunan C# Oct 08, 2023 pm 12:16 PM

Cara menangani masalah penyegerakan benang dan akses serentak dalam pembangunan C# memerlukan contoh kod khusus Dalam pembangunan C#, isu penyegerakan benang dan akses serentak adalah cabaran biasa. Oleh kerana berbilang rangkaian boleh mengakses dan beroperasi pada data yang dikongsi secara serentak, keadaan perlumbaan dan ketidakkonsistenan data boleh timbul. Untuk menyelesaikan masalah ini, kami boleh menggunakan pelbagai mekanisme penyegerakan dan kaedah kawalan konkurensi untuk memastikan kerjasama yang betul dan konsistensi data antara rangkaian. Kunci Mutex (Mutex) Kunci Mutex ialah mekanisme penyegerakan paling asas yang digunakan untuk melindungi sumber yang dikongsi. Lawati apabila diperlukan

Program Java: Gunakan huruf besar pertama setiap perkataan dalam rentetan Program Java: Gunakan huruf besar pertama setiap perkataan dalam rentetan Aug 20, 2023 pm 03:45 PM

Astringisaclassof'java.lang'packagethatstoresaseriesofcharacters.Thosecharacterreally actuallyString-typeobjects.Kami mesti menutup nilai rentetan dalam petikan berganda.Secara amnya, kami boleh mewakili aksara dalam huruf kecil dan dua huruf dalam Java.Dan, ia juga mungkin untuk ditukar

Cara menggunakan Java untuk melaksanakan fungsi statistik inventori sistem pengurusan gudang Cara menggunakan Java untuk melaksanakan fungsi statistik inventori sistem pengurusan gudang Sep 24, 2023 pm 01:13 PM

Cara menggunakan Java untuk melaksanakan fungsi statistik inventori sistem pengurusan gudang Dengan perkembangan e-dagang dan peningkatan kepentingan pengurusan pergudangan, fungsi statistik inventori telah menjadi bahagian yang amat diperlukan dalam sistem pengurusan gudang. Sistem pengurusan gudang yang ditulis dalam Java boleh melaksanakan fungsi statistik inventori melalui kod ringkas dan cekap, membantu syarikat mengurus storan gudang dengan lebih baik dan meningkatkan kecekapan operasi. 1. Pengenalan latar belakang Sistem pengurusan gudang merujuk kepada kaedah pengurusan yang menggunakan teknologi komputer untuk melaksanakan pengurusan data, pemprosesan maklumat dan analisis membuat keputusan ke atas gudang perusahaan. Statistik inventori ialah

Alat pemantauan dan penalaan prestasi biasa dalam pembangunan Java Alat pemantauan dan penalaan prestasi biasa dalam pembangunan Java Oct 10, 2023 pm 01:49 PM

Alat pemantauan dan penalaan prestasi biasa dalam pembangunan Java memerlukan contoh kod khusus Pengenalan: Dengan pembangunan berterusan teknologi Internet, Java, sebagai bahasa pengaturcaraan yang stabil dan cekap, digunakan secara meluas dalam proses pembangunan. Walau bagaimanapun, disebabkan sifat merentas platform Java dan kerumitan persekitaran berjalan, isu prestasi telah menjadi faktor yang tidak boleh diabaikan dalam pembangunan. Untuk memastikan ketersediaan tinggi dan respons pantas aplikasi Java, pembangun perlu memantau dan menala prestasi. Artikel ini akan memperkenalkan beberapa pemantauan dan penalaan prestasi Java biasa

ChatGPT Java: Bagaimana untuk membina sistem pengesyoran muzik pintar ChatGPT Java: Bagaimana untuk membina sistem pengesyoran muzik pintar Oct 27, 2023 pm 01:55 PM

ChatGPTJava: Bagaimana untuk membina sistem pengesyoran muzik pintar, contoh kod khusus diperlukan Pengenalan: Dengan perkembangan pesat Internet, muzik telah menjadi bahagian penting dalam kehidupan seharian manusia. Apabila platform muzik terus muncul, pengguna sering menghadapi masalah biasa: bagaimana untuk mencari muzik yang sesuai dengan citarasa mereka? Untuk menyelesaikan masalah ini, sistem pengesyoran muzik pintar telah wujud. Artikel ini akan memperkenalkan cara menggunakan ChatGPTJava untuk membina sistem pengesyoran muzik pintar dan menyediakan contoh kod khusus. Tidak.

Bagaimana untuk melaksanakan algoritma carian pertama luas menggunakan java Bagaimana untuk melaksanakan algoritma carian pertama luas menggunakan java Sep 19, 2023 pm 06:04 PM

Cara menggunakan Java untuk melaksanakan algoritma carian pertama keluasan algoritma Carian Pertama Keluasan (Breadth-FirstSearch, BFS) ialah algoritma carian yang biasa digunakan dalam teori graf, yang boleh mencari laluan terpendek antara dua nod dalam graf. BFS digunakan secara meluas dalam banyak aplikasi, seperti mencari laluan terpendek dalam mez, perangkak web, dsb. Artikel ini akan memperkenalkan cara menggunakan bahasa Java untuk melaksanakan algoritma BFS, dan melampirkan contoh kod tertentu. Pertama, kita perlu menentukan kelas untuk menyimpan nod graf Kelas ini mengandungi nod

See all articles