Heim > Java > javaLernprogramm > 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
Freigeben: 2023-05-09 10:07:08
nach vorne
1346 Leute haben es durchsucht

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

    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();
            }
        }
    Nach dem Login kopieren

    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();
            }
        }
    }
    Nach dem Login kopieren
    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!

    Verwandte Etiketten:
    Quelle:yisu.com
    Erklärung dieser Website
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
    Beliebte Tutorials
    Mehr>
    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage