Heim  >  Artikel  >  Java  >  Um die Signalsynchronisierung in kollaborativen Java-Multithread-Jobs zu implementieren, können Sie die folgenden Methoden verwenden:

Um die Signalsynchronisierung in kollaborativen Java-Multithread-Jobs zu implementieren, können Sie die folgenden Methoden verwenden:

WBOY
WBOYnach vorne
2023-05-09 10:07:081274Durchsuche

    1. Signalsynchronisation

    Multi-Threading ist oft ein kollaborativer Vorgang. Beispielsweise sammeln vier Threads vierteljährlich Statistiken zu E-Commerce-Daten. Nachdem die Statistiken abgeschlossen sind, werden sie zusammengefasst. Woher wissen wir, dass alle vier Threads ausgeführt wurden? Wir können die von JDK1.5 bereitgestellten Hilfsklassen CountDownLatch (

    Reduce count), CyclicBarrier (zyklische Barriere) und Semaphore (Semaphor) verwenden.

    2. Basierend auf der Zeitdimension

    1. CountDownLatch

    Wie viele kollaborative Threads gibt es, um die CountDownLatch-Konstruktionsparameter zu initialisieren?

     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("所有线程任务已经执行完成!");
        }

    Um die Signalsynchronisierung in kollaborativen Java-Multithread-Jobs zu implementieren, können Sie die folgenden Methoden verwenden:

    2, CyclicBarrier

    ähnelt dem Reduzieren der Anzahl

     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();
            }
        }

    Um die Signalsynchronisierung in kollaborativen Java-Multithread-Jobs zu implementieren, können Sie die folgenden Methoden verwenden: # 🎜🎜#

    3. Basierend auf der Signaldimension

    Semaphor, der Thread und das Signal sind m:n, wobei 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();
            }
        }
    }

    Zuerst erhalten Threads 4, 1 und 3 das Signal. Nachdem Thread 1 das Signal freigegeben hat, erhält Thread 2 das Signal. Nachdem Thread 2 und 3 das Signal freigegeben haben, erhalten Thread 5 und 6 das Signal.

    Um die Signalsynchronisierung in kollaborativen Java-Multithread-Jobs zu implementieren, können Sie die folgenden Methoden verwenden:

    Das obige ist der detaillierte Inhalt vonUm die Signalsynchronisierung in kollaborativen Java-Multithread-Jobs zu implementieren, können Sie die folgenden Methoden verwenden:. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen