


Bagaimana untuk menentukan pembilang Java CountDownLatch dan penghalang kitaran CyclicBarrier
Definisi
CountDownLatch: Alat bantuan penyegerakan yang membenarkan satu atau lebih urutan menunggu sehingga satu set operasi yang dijalankan dalam urutan lain selesai.
CyclicBarrier: Bantuan penyegerakan yang membolehkan satu set utas kepada semua menunggu antara satu sama lain untuk mencapai titik halangan yang sama.
Di atas ialah takrifan rasmi Oracle. Ringkasnya
CountDownLatch: Counter yang membenarkan satu atau lebih utas menunggu sehingga satu set operasi yang dilakukan dalam urutan lain selesai.
Penghalang Kitaran: Penghalang Kitaran, yang membenarkan sekumpulan utas menunggu antara satu sama lain untuk mencapai titik halangan yang sama.
Perbezaan
CountDownLatch ialah ahli AQS (AbstractQueuedSynchronizer), tetapi CyclicBarrier tidak.
Dalam senario penggunaan CountDownLatch, terdapat dua jenis utas, satu ialah utas menunggu yang memanggil kaedah await() dan satu lagi ialah utas operasi yang memanggil countDownl () kaedah. Dalam konteks CyclicBarrier, semua utas ialah utas yang menunggu antara satu sama lain dan daripada jenis yang sama.
CountDownLatch ialah kiraan turun, ia tidak boleh ditetapkan semula selepas penurunan, CyclicBarrier ialah kiraan naik, ia ditetapkan semula secara automatik selepas kenaikan
Contoh CountDownLatch
Buat dua kumpulan benang, satu kumpulan menunggu kumpulan lain selesai melaksanakan sebelum meneruskan
CountDownLatch countDownLatch = new CountDownLatch(5); ExecutorService executorService = Executors.newCachedThreadPool(); for (int i = 0; i < 5; i++) { executorService.execute(() -> { countDownLatch.countDown(); System.out.println("run.."); }); } for (int i = 0; i < 3; i++) { //我们要等上面执行完成才继续 executorService.execute(() -> { try { countDownLatch.await(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("await.."); }); } executorService.shutdown();
Cetak:
lari..
lari..
lari ..
lari..
lari..
tunggu..
tunggu..
tunggu..
Tunggu untuk utas pengumpulan selesai melaksanakan, dan kemudian utas utama Keluarkan hasil terkumpul
public class ThreadUnsafeExample { private int cnt = 0; public void add() { cnt++; } public int get() { return cnt; } public static void main(String[] args) throws InterruptedException { final int threadSize = 1000; ThreadUnsafeExample example = new ThreadUnsafeExample(); final CountDownLatch countDownLatch = new CountDownLatch(threadSize); ExecutorService executorService = Executors.newCachedThreadPool(); for (int i = 0; i < threadSize; i++) { executorService.execute(() -> { example.add(); countDownLatch.countDown(); }); } countDownLatch.await(); executorService.shutdown(); System.out.println(example.get()); } }
Cetak:
997
3 Simulasi konkurensi
ExecutorService executorService = Executors.newCachedThreadPool(); CountDownLatch countDownLatch = new CountDownLatch(1); for (int i = 0; i < 5; i++) { executorService.submit( () -> { try { countDownLatch.await(); System.out.println("【" + Thread.currentThread().getName() + "】开始执行……"); } catch (InterruptedException e) { e.printStackTrace(); } }); } Thread.sleep(2000); countDownLatch.countDown();//开始并发 executorService.shutdown();
Cetak:
Contoh CyclicBarrier Semua utas menunggu antara satu sama lain sehingga langkah tertentu selesai sebelum meneruskan【pool-2-thread-2】Mulakan pelaksanaan……
【pool-2-thread-5】Mulakan pelaksanaan…&hellip>;[pool-2-thread-1] memulakan pelaksanaan……
[pool-2-thread-4] memulakan pelaksanaan……
final int totalThread = 3; CyclicBarrier cyclicBarrier = new CyclicBarrier(3); ExecutorService executorService = Executors.newCachedThreadPool(); for (int i = 0; i < totalThread; i++) { executorService.execute(() -> { System.out.println("before.."); try { cyclicBarrier.await(); } catch (InterruptedException | BrokenBarrierException e) { e.printStackTrace(); } System.out.println("after.."); }); } executorService.shutdown();Cetak:
sebelum..sebelum..
sebelum ..
selepas..
selepas..
selepas..
Atas ialah kandungan terperinci Bagaimana untuk menentukan pembilang Java CountDownLatch dan penghalang kitaran CyclicBarrier. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Versi Mac WebStorm
Alat pembangunan JavaScript yang berguna

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

DVWA
Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

Dreamweaver Mac版
Alat pembangunan web visual