Rumah Java javaTutorial Bagaimana untuk menggunakan kunci dan penyegerak dalam pengaturcaraan serentak Java?

Bagaimana untuk menggunakan kunci dan penyegerak dalam pengaturcaraan serentak Java?

May 08, 2024 pm 10:06 PM
Kunci Penyegerak

Java menyediakan kunci dan penyegerak untuk mengurus akses kepada sumber yang dikongsi. Kunci seperti ReentrantLock membenarkan hanya satu utas untuk mengakses bahagian kritikal pada satu masa, manakala penyegerak seperti Semaphore dan CountDownLatch menyediakan kawalan serentak yang lebih fleksibel, seperti mengehadkan bilangan utas yang mengakses sumber secara serentak atau menunggu semua utas menyelesaikan tugas mereka . Menggunakan mekanisme ini dengan berkesan boleh mengelakkan perlumbaan data dan meningkatkan prestasi aplikasi.

Java 并发编程中如何使用锁和同步器?

Kunci dan Penyegerak dalam Pengaturcaraan Serentak Java

Pengaturcaraan serentak membolehkan berbilang urutan dilaksanakan secara serentak, tetapi memerlukan mekanisme untuk mengurus akses kepada sumber yang dikongsi. Java menyediakan pelbagai kunci dan penyegerak untuk mencapai matlamat ini.

Kunci

Kunci membenarkan hanya satu utas untuk mengakses bahagian kritikal (bahagian yang diubah suai daripada sumber yang dikongsi) pada satu masa. Kunci yang biasa digunakan ialah:

// 创建一个 ReentrantLock
Lock lock = new ReentrantLock();

// 获取锁
lock.lock();

// 访问临界区
// ...

// 释放锁
lock.unlock();
Salin selepas log masuk

Penyegerak

Penyegerak lebih maju daripada kunci dan menyediakan kawalan serentak yang lebih fleksibel. Penyegerak yang biasa digunakan ialah:

Semaphore

Semaphore mengehadkan bilangan utas yang boleh mengakses sumber pada masa yang sama.

// 创建一个 Semaphore,允许最多 3 个线程同时访问
Semaphore semaphore = new Semaphore(3);

// 申请许可证
semaphore.acquire();

// 访问临界区
// ...

// 释放许可证
semaphore.release();
Salin selepas log masuk

CountDownLatch

CountDownLatch menunggu semua urutan menyelesaikan tugas mereka sebelum meneruskan.

// 创建一个 CountDownLatch,等待 10 个线程完成
CountDownLatch latch = new CountDownLatch(10);

// 10 个线程执行任务
// ...

// 每个线程完成后,计数器减一
latch.countDown();

// 主线程等待所有线程完成
latch.await();
Salin selepas log masuk

Kes praktikal

Berikut ialah kes praktikal operasi akaun bank, menggunakan Semaphore untuk mengehadkan bilangan utas yang mengakses akaun pada masa yang sama:

class BankAccount {
    private Semaphore semaphore = new Semaphore(1);
    private double balance;

    public void deposit(double amount) {
        try {
            semaphore.acquire();
            balance += amount;
        } finally {
            semaphore.release();
        }
    }

    public void withdraw(double amount) {
        try {
            semaphore.acquire();
            balance -= amount;
        } finally {
            semaphore.release();
        }
    }
}
Salin selepas log masuk

Kesimpulan

Kunci dan penyegerak digunakan mengurus akses kepada sumber yang dikongsi dalam alat berkuasa pengaturcaraan serentak Java. Dengan menggunakan mekanisme ini dengan berhati-hati, anda boleh mengelakkan perlumbaan data dengan berkesan dan meningkatkan prestasi program.

Atas ialah kandungan terperinci Bagaimana untuk menggunakan kunci dan penyegerak dalam pengaturcaraan serentak 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

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)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
3 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)

Apakah perbezaan antara iPhone yang dikunci dan tidak dikunci Pengenalan terperinci: Perbandingan perbezaan antara iPhone yang dikunci dan tidak dikunci Apakah perbezaan antara iPhone yang dikunci dan tidak dikunci Pengenalan terperinci: Perbandingan perbezaan antara iPhone yang dikunci dan tidak dikunci Mar 28, 2024 pm 03:10 PM

Telefon mudah alih Apple ialah telefon mudah alih yang paling banyak dipilih oleh orang baru-baru ini, tetapi kita sering melihat orang membincangkan perbezaan antara telefon bimbit Apple yang dikunci dan tidak dikunci dalam talian, dan mereka terjerat dalam mana satu untuk dibeli. Hari ini, Chen Siqi akan berkongsi dengan anda perbezaan antara iPhone terkunci dan tidak berkunci serta membantu anda menyelesaikan masalah. Malah, tidak banyak perbezaan antara kedua-duanya dari segi penampilan dan fungsi. Apakah versi terkunci dan versi tidak berkunci? iPhone tanpa sekatan mengunci bermakna ia tidak dihadkan oleh pengendali, dan kad SIM mana-mana pengendali boleh digunakan secara normal. Versi terkunci bermakna ia mempunyai kunci rangkaian dan hanya boleh menggunakan kad SIM yang disediakan oleh pengendali yang ditetapkan dan tidak boleh menggunakan orang lain. Malah, telefon Apple yang tidak berkunci boleh menggunakan mudah alih,

Bagaimana untuk menggunakan Oracle untuk bertanya sama ada jadual dikunci? Bagaimana untuk menggunakan Oracle untuk bertanya sama ada jadual dikunci? Mar 06, 2024 am 11:54 AM

Tajuk: Bagaimana untuk menggunakan Oracle untuk bertanya sama ada jadual dikunci? Dalam pangkalan data Oracle, kunci jadual bermaksud bahawa apabila transaksi menjalankan operasi tulis pada jadual, transaksi lain akan disekat apabila mereka ingin melakukan operasi tulis pada jadual atau membuat perubahan struktur pada jadual (seperti menambah lajur, memadam baris , dan lain-lain.). Dalam proses pembangunan sebenar, kita sering perlu bertanya sama ada jadual dikunci untuk menyelesaikan masalah dan menangani masalah berkaitan dengan lebih baik. Artikel ini akan memperkenalkan cara menggunakan pernyataan Oracle untuk bertanya sama ada jadual dikunci dan memberikan contoh kod tertentu. Untuk memeriksa sama ada meja dikunci, kita

Bagaimanakah fungsi kunci dalam golang dilaksanakan? Bagaimanakah fungsi kunci dalam golang dilaksanakan? Jun 05, 2024 pm 12:39 PM

Kunci dalam bahasa Go melaksanakan kod serentak yang disegerakkan untuk mengelakkan persaingan data: Mutex: Mutex lock, yang memastikan bahawa hanya satu goroutine memperoleh kunci pada masa yang sama dan digunakan untuk kawalan bahagian kritikal. RWMutex: Kunci baca-tulis, yang membolehkan berbilang goroutin membaca data pada masa yang sama, tetapi hanya satu goroutine boleh menulis data pada masa yang sama Ia sesuai untuk senario yang memerlukan pembacaan dan penulisan data yang kerap.

Python GIL (Global Interpreter Lock): Membongkar prinsip dan kesan prestasi di belakangnya Python GIL (Global Interpreter Lock): Membongkar prinsip dan kesan prestasi di belakangnya Feb 27, 2024 am 09:00 AM

pythonGIL (Global Interpreter Lock) ialah mekanisme penting dalam Python Ia mengehadkan bahawa hanya satu utas boleh melaksanakan kod bait Python pada masa yang sama. Ini terutamanya untuk memastikan kestabilan penterjemah Python, kerana pengurusan memori Python dan mekanisme pengumpulan sampah adalah satu benang. Jika berbilang benang dibenarkan untuk melaksanakan kod bait Python pada masa yang sama, kerosakan memori atau ralat lain yang tidak dapat diramalkan mungkin berlaku. Prinsip GIL agak mudah. Ia adalah kunci yang diselenggara oleh penterjemah Python, dan apabila benang melaksanakan kod bait Python, ia memperoleh GIL. Jika utas lain ingin melaksanakan kod bait Python, mereka mesti menunggu GIL dikeluarkan. Apabila GIL dilepaskan, lain

Penggunaan dan amalan terbaik kunci cache di Golang. Penggunaan dan amalan terbaik kunci cache di Golang. Jun 20, 2023 am 09:50 AM

Penggunaan dan amalan terbaik kunci cache di Golang. Kunci cache dalam Golang ialah kaedah yang digunakan untuk meningkatkan kecekapan pelaksanaan dalam persekitaran konkurensi tinggi. Dalam persekitaran serentak, berbilang Goroutine boleh mengakses sekeping data yang sama pada masa yang sama, yang mungkin membawa kepada masalah seperti persaingan kunci dan persaingan data. Kunci cache ialah mekanisme untuk mengurus storan data dikongsi untuk memastikan integriti dan konsistensi data dengan menghalang akses serentak. Dalam artikel ini, kami akan menumpukan pada penggunaan dan amalan terbaik kunci cache di Golang. 1.Gol

Kunci dan penyegerakan dalam pengaturcaraan serentak Python: memastikan kod anda selamat dan boleh dipercayai Kunci dan penyegerakan dalam pengaturcaraan serentak Python: memastikan kod anda selamat dan boleh dipercayai Feb 19, 2024 pm 02:30 PM

Kunci dan Penyegerakan dalam Pengaturcaraan Serentak Dalam pengaturcaraan serentak, berbilang proses atau utas berjalan serentak, yang boleh membawa kepada isu pertikaian sumber dan ketidakkonsistenan. Untuk menyelesaikan masalah ini, kunci dan mekanisme penyegerakan diperlukan untuk menyelaraskan akses kepada sumber yang dikongsi. Konsep Kunci Kunci ialah mekanisme yang membenarkan hanya satu utas atau proses mengakses sumber yang dikongsi pada satu masa. Apabila satu utas atau proses memperoleh kunci, utas atau proses lain disekat daripada mengakses sumber sehingga kunci dilepaskan. Jenis kunci Terdapat beberapa jenis kunci dalam ular sawa: Kunci Mutex (Mutex): memastikan bahawa hanya satu utas atau proses boleh mengakses sumber pada satu masa. Pembolehubah keadaan: Membenarkan benang atau proses menunggu keadaan tertentu dan kemudian memperoleh kunci. Kunci baca-tulis: membenarkan berbilang utas membaca sumber pada masa yang sama, tetapi hanya membenarkan satu utas menulis sumber

Analisis mendalam tentang mekanisme pelaksanaan asas kunci Golang Analisis mendalam tentang mekanisme pelaksanaan asas kunci Golang Dec 28, 2023 am 11:26 AM

Penjelasan terperinci tentang prinsip pelaksanaan asas kunci Golang memerlukan contoh kod khusus: Pengaturcaraan serentak ialah bahagian yang sangat penting dalam pembangunan perisian moden, dan kunci ialah mekanisme untuk mencapai kawalan serentak. Di Golang, konsep kunci digunakan secara meluas dalam pengaturcaraan serentak. Artikel ini akan meneroka secara mendalam prinsip pelaksanaan asas kunci Golang dan memberikan contoh kod khusus. Prinsip pelaksanaan asas kunci mutex (Mutex) Kunci Mutex ialah salah satu jenis kunci yang paling biasa digunakan di Golang. Ia menggunakan penyegerakan struktur data asas.M

Perbandingan prestasi kunci teragih yang dilaksanakan oleh Redis Perbandingan prestasi kunci teragih yang dilaksanakan oleh Redis Jun 20, 2023 pm 05:46 PM

Apabila aplikasi Internet menjadi lebih besar dan lebih besar, sistem yang diedarkan menjadi lebih biasa. Dalam sistem ini, kunci teragih adalah ciri penting. Oleh kerana permintaan yang kuat untuk kunci yang diedarkan, terdapat pelbagai kaedah pelaksanaan. Antaranya, Redis ialah alat popular yang digunakan secara meluas dalam pelaksanaan kunci teragih. Dalam artikel ini, kami akan meneroka perbandingan prestasi kunci teragih yang dilaksanakan oleh Redis. 1. Konsep Asas Redis Sebelum membincangkan prestasi kunci yang diedarkan Redis, kita perlu memahami beberapa konsep asas Redis.

See all articles