Rumah > Java > javaTutorial > teks badan

Untuk melaksanakan penyegerakan isyarat dalam kerja kolaboratif berbilang benang Java, anda boleh menggunakan kaedah berikut:

WBOY
Lepaskan: 2023-05-09 10:07:08
ke hadapan
1326 orang telah melayarinya

    1. Penyegerakan isyarat

    Berbilang rangkaian selalunya merupakan operasi kolaboratif. Sebagai contoh, empat utas mengumpul statistik pada data e-dagang setiap suku tahun Selepas statistik selesai, ia diringkaskan. Bagaimana untuk mengetahui bahawa keempat-empat utas telah dilaksanakan? Kita boleh menggunakan kelas tambahan CountDownLatch (

    untuk mengurangkan kiraan), CyclicBarrier (penghalang kitaran) dan Semaphore (semaphore) yang disediakan oleh JDK1.5.

    2. Berdasarkan dimensi masa

    1. CountDownLatch

    Parameter pembinaan CountDownLatch dimulakan mengikut bilangan utas bekerjasama.

     public static void main(String[] args) throws InterruptedException {
            final int NUM=6;
            //定义总数量;
            CountDownLatch countDownLatch=new CountDownLatch(NUM);
            for (int i = 0; i < NUM; i++) {
                new Thread(()->{
                    System.out.println(Thread.currentThread().getName()+"线程,已执行!");
                    //减少计数
                    countDownLatch.countDown();
                },String.valueOf(i+1)).start();
            }
            //等待所有任务完成
            countDownLatch.await();
            System.out.println("所有线程任务已经执行完成!");
        }
    Salin selepas log masuk

    Untuk melaksanakan penyegerakan isyarat dalam kerja kolaboratif berbilang benang Java, anda boleh menggunakan kaedah berikut:

    2. CyclicBarrier

    adalah serupa dengan mengurangkan kiraan

     public static void main(String[] args) {
            final int NUM = 6;
            //定义循环数量及循环完成后的任务(Runnable接口实现);
            CyclicBarrier cyclicBarrier = new CyclicBarrier(NUM, () -> {
                System.out.println("所有线程任务已经执行完成!");
            });
            for (int i = 0; i < NUM; i++) {
                new Thread(()->{
                    System.out.println(Thread.currentThread().getName()+"线程,已执行!");
                    try {
                        //等待点或障碍点,等待所有任务完成,
                        cyclicBarrier.await();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    } catch (BrokenBarrierException e) {
                        e.printStackTrace();
                    }
                },String.valueOf(i+1)).start();
            }
        }
    Salin selepas log masuk

    Untuk melaksanakan penyegerakan isyarat dalam kerja kolaboratif berbilang benang Java, anda boleh menggunakan kaedah berikut:

    3 dimensi isyarat

    Semafor, benang dan isyarat ialah m:n, dengan m>=n.

    import java.util.Random;
    import java.util.concurrent.Semaphore;
    import java.util.concurrent.TimeUnit;
    /*信号灯
    * 6个线程,抢占三个信号
    * */
    public class SemaphoreDemo {
        public static void main(String[] args) {
            Semaphore semaphore=new Semaphore(3);
            for (int i = 0; i < 6; i++) {
                new Thread(()->{
                    try {
                        //获取信号
                        semaphore.acquire();
                        System.out.println("线程:"+Thread.currentThread().getName()+"----获取信号");
                        int time = new Random().nextInt(5);
                        System.out.println(("线程:"+Thread.currentThread().getName()+"----休眠"+time+"s!"));
                        TimeUnit.SECONDS.sleep(time);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }finally {
                    //    释放信号
                        System.out.println("线程:"+Thread.currentThread().getName()+"---释放信号");
                        semaphore.release();
                    }
                },String.valueOf(i+1)).start();
            }
        }
    }
    Salin selepas log masuk

    Pertama, utas 4, 1 dan 3 mendapat isyarat Selepas utas 1 melepaskan isyarat, utas 2 mendapat isyarat. Selepas benang 2 dan 3 melepaskan isyarat, benang 5 dan 6 mendapat isyarat.

    Untuk melaksanakan penyegerakan isyarat dalam kerja kolaboratif berbilang benang Java, anda boleh menggunakan kaedah berikut:

    Atas ialah kandungan terperinci Untuk melaksanakan penyegerakan isyarat dalam kerja kolaboratif berbilang benang Java, anda boleh menggunakan kaedah berikut:. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Label berkaitan:
    sumber:yisu.com
    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
    Tutorial Popular
    Lagi>
    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan