Penghalang ialah alat penyegerakan yang digunakan untuk membuat sekumpulan utas menunggu sehingga semua utas mencapai titik yang ditentukan sebelum meneruskan pelaksanaan. Halangan boleh dibuat menggunakan java.util.concurrent.CyclicBarrier, dan setiap utas bergabung dengan halangan dan menunggu utas lain dengan memanggil kaedah await(). Apabila semua benang telah mencapai halangan, mereka meneruskan pelaksanaan. Halangan boleh digunakan untuk memastikan tiada operasi seterusnya dilakukan sehingga semua benang menyelesaikan pengiraannya.
Menggunakan halangan untuk mencapai penyegerakan utas dalam pengaturcaraan serentak Java
Halangan ialah alat penyegerakan dalam pengaturcaraan serentak yang membolehkan sekumpulan utas menunggu sehingga semua utas mencapai titik tertentu sebelum meneruskan pelaksanaan. Ini berguna dalam senario tertentu, seperti melakukan operasi seterusnya selepas semua rangkaian telah melengkapkan pemulaan.
Create Barrier
Kita boleh menggunakan kelas java.util.concurrent.CyclicBarrier
untuk mencipta penghalang. Pembina kelas ini menerima parameter integer yang mewakili bilangan benang dalam penghalang. java.util.concurrent.CyclicBarrier
类来创建屏障。该类的构造函数接收一个整数参数,表示屏障中线程的数量。
CyclicBarrier barrier = new CyclicBarrier(4);
使用屏障
要使用屏障,每个线程都必须调用 await()
方法。该方法将阻塞线程,直到屏障中所有线程都调用了 await()
方法。当所有线程都到达屏障后,它们将继续执行。
for (int i = 0; i < 4; i++) { new Thread(() -> { try { barrier.await(); } catch (InterruptedException | BrokenBarrierException e) { e.printStackTrace(); } }).start(); }
实战案例
假设我们有一组线程需要生成一个报告,只有当所有线程都完成其计算后才能汇总。我们可以使用屏障来确保在所有线程完成计算之前不会开始汇总。
cyclicBarrier.await(); // 汇总结果并生成报告
注意事项
BrokenBarrierException
rrreeeawait()
. Kaedah ini menyekat utas sehingga semua utas dalam penghalang telah memanggil kaedah await()
. Apabila semua benang telah mencapai halangan, mereka meneruskan pelaksanaan. 🎜rrreee🎜🎜Kes Praktikal🎜🎜🎜 Katakan kita mempunyai sekumpulan utas yang perlu menjana laporan yang hanya boleh diringkaskan apabila semua utas telah menyelesaikan pengiraan mereka. Kita boleh menggunakan penghalang untuk memastikan pengagregatan tidak bermula sehingga semua urutan menyelesaikan pengiraannya. 🎜rrreee🎜🎜Nota🎜🎜BrokenBarrierException
dan semua utas lain akan terus dilaksanakan. 🎜🎜Atas ialah kandungan terperinci Bagaimana untuk menggunakan halangan untuk mencapai penyegerakan benang dalam pengaturcaraan serentak Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!