8. JUC: la condición se da cuenta de una notificación y un despertador precisos

Mire el video del proceso de aprendizaje: [Crazy God Says Java]
https://www.bilibili.com/video/BV1B7411L7tE?p=9
Bienvenidos a todos para apoyar ¡Oh, muy concienzudo maestro!

código java

package com.zjl;

import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
 * Created by zjl
 * 2020/11/20
 **/
/*
* A执行完调用B,B执行完调用C,C执行完调用A
* */
public class Test3 {
    
    
    public static void main(String[] args) {
    
    

        Data3 data3 = new Data3();
        new Thread(()->{
    
    
            for (int i = 0; i < 10; i++) {
    
    
                data3.printA();
            }
        },"A").start();
        new Thread(()->{
    
    
            for (int i = 0; i < 10; i++) {
    
    
                data3.printB();
            }
        },"B").start();
        new Thread(()->{
    
    
            for (int i = 0; i < 10; i++) {
    
    
                data3.printC();
            }
        },"C").start();
    }

}

class Data3{
    
       //资源类Lock

    Lock lock = new ReentrantLock();
    Condition condition1 = lock.newCondition();
    Condition condition2 = lock.newCondition();
    Condition condition3 = lock.newCondition();
    int number = 1;  //1 执行 A,2 执行 B,3 执行 C


    public void printA(){
    
    
        lock.lock();
        try {
    
    
            //业务:等待-->执行-->唤醒
            while (number != 1){
    
    
                condition1.await();
            }
            System.out.println(Thread.currentThread().getName() + "===>AAAAAAAAAAAAAAAA");
            number = 2;
            condition2.signal();
        } catch (Exception e) {
    
    
            e.printStackTrace();
        } finally {
    
    
            lock.unlock();
        }
    }

    public void printB(){
    
    
        lock.lock();
        try {
    
    
            //业务:等待-->执行-->唤醒
            while (number != 2){
    
    
                condition2.await();
            }
            System.out.println(Thread.currentThread().getName() + "===>BBBBBBBBBBBBBB");
            number = 3;
            condition3.signal();
        } catch (Exception e) {
    
    
            e.printStackTrace();
        } finally {
    
    
            lock.unlock();
        }
    }

    public void printC(){
    
    
        lock.lock();
        try {
    
    
            //业务:等待-->执行-->唤醒
            while (number != 3){
    
    
                condition3.await();
            }
            System.out.println(Thread.currentThread().getName() + "===>CCCCCCCCCCCCC");
            number = 1;
            condition1.signal();
        } catch (Exception e) {
    
    
            e.printStackTrace();
        } finally {
    
    
            lock.unlock();
        }
    }


}

resultado de la operación:

/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/bin/java "-javaagent:/Users/zhangjianlong/Library/Application Support/JetBrains/Toolbox/apps/IDEA-U/ch-0/193.5662.53/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=61424:/Users/zhangjianlong/Library/Application Support/JetBrains/Toolbox/apps/IDEA-U/ch-0/193.5662.53/IntelliJ IDEA.app/Contents/bin" -Dfile.encoding=UTF-8 -classpath /Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/jaccess.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/jfxswt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/lib/ant-javafx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/lib/javafx-mx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/lib/jconsole.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/lib/packager.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/lib/sa-jdi.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/lib/tools.jar:/Users/zhangjianlong/testCode/JUC-study/target/classes:/Users/zhangjianlong/apache-maven-3.6.3/repository/org/projectlombok/lombok/1.18.8/lombok-1.18.8.jar com.zjl.Test3
A===>AAAAAAAAAAAAAAAA
B===>BBBBBBBBBBBBBB
C===>CCCCCCCCCCCCC
A===>AAAAAAAAAAAAAAAA
B===>BBBBBBBBBBBBBB
C===>CCCCCCCCCCCCC
A===>AAAAAAAAAAAAAAAA
B===>BBBBBBBBBBBBBB
C===>CCCCCCCCCCCCC
A===>AAAAAAAAAAAAAAAA
B===>BBBBBBBBBBBBBB
C===>CCCCCCCCCCCCC
A===>AAAAAAAAAAAAAAAA
B===>BBBBBBBBBBBBBB
C===>CCCCCCCCCCCCC
A===>AAAAAAAAAAAAAAAA
B===>BBBBBBBBBBBBBB
C===>CCCCCCCCCCCCC
A===>AAAAAAAAAAAAAAAA
B===>BBBBBBBBBBBBBB
C===>CCCCCCCCCCCCC
A===>AAAAAAAAAAAAAAAA
B===>BBBBBBBBBBBBBB
C===>CCCCCCCCCCCCC
A===>AAAAAAAAAAAAAAAA
B===>BBBBBBBBBBBBBB
C===>CCCCCCCCCCCCC
A===>AAAAAAAAAAAAAAAA
B===>BBBBBBBBBBBBBB
C===>CCCCCCCCCCCCC

Process finished with exit code 0

Supongo que te gusta

Origin blog.csdn.net/qq_41347385/article/details/109857600
Recomendado
Clasificación