【多线程0】三个线程循环打印ABC

package com.leigod.user.middle.service.impl;

import lombok.SneakyThrows;

/**
 * @author Sam.yang
 * @since 2021/3/29 17:58
 */
public class Test {

    //定义锁对象
    Object lock = new Object();

    //定义通知对象
    boolean tagA = true;
    boolean tagB = false;
    boolean tagC = false;


    public static void main(String[] args) {

        Test test = new Test();
        for (int i = 0; i < 100; i++) {
            Thread threadA = new Thread(new Runnable() {
                @SneakyThrows
                @Override
                public void run() {
                    test.printA(Thread.currentThread().getName());
                }
            });

            Thread threadB = new Thread(new Runnable() {
                @SneakyThrows
                @Override
                public void run() {
                    test.printB(Thread.currentThread().getName());
                }
            });

            Thread threadC = new Thread(new Runnable() {
                @SneakyThrows
                @Override
                public void run() {
                    test.printC(Thread.currentThread().getName());
                }
            });

            threadA.run();
            threadB.run();
            threadC.run();
        }



    }

    /**
     * 打印A
     */
    private void printA(String tName) throws InterruptedException {
        synchronized (lock) {
            while (!tagA) {
                lock.wait();
            }
            System.out.println("A");
            tagA = false;
            tagB = true;
            lock.notify();
        }
    }

    /**
     * 打印B
     */
    private void printB(String tName) throws InterruptedException {
        synchronized (lock) {
            while (!tagB) {
                lock.wait();
            }
            System.out.println("B");
            tagA = false;
            tagB = false;
            tagC = true;
            lock.notify();
        }
    }

    /**
     * 打印C
     */
    private void printC(String tName) throws InterruptedException {
        synchronized (lock) {
            while (!tagC) {
                lock.wait();
            }
            System.out.println("C");
            tagA = true;
            tagB = false;
            tagC = false;
            lock.notify();
        }
    }
}

 

posted @ 2021-07-02 09:29  听风是雨  阅读(114)  评论(0编辑  收藏  举报
/* 看板娘 */