zoukankan      html  css  js  c++  java
  • java多线程编程之连续打印abc

    1. 使用  ReentrantLock

    package com.concurrent.demo;
    
    import java.util.concurrent.locks.Condition;
    import java.util.concurrent.locks.ReentrantLock;
    
    public class SyncPrinter implements Runnable {
    
        public static void main(String[] args) throws InterruptedException {
            ReentrantLock reentrantLock = new ReentrantLock();
    
            Condition conditionA = reentrantLock.newCondition();
            Condition conditionB = reentrantLock.newCondition();
            Condition conditionC = reentrantLock.newCondition();
    
            SyncPrinter printerA = new SyncPrinter(reentrantLock, conditionA, conditionB, "A");
            SyncPrinter printerB = new SyncPrinter(reentrantLock, conditionB, conditionC, "B");
            SyncPrinter printerC = new SyncPrinter(reentrantLock, conditionC, conditionA, "C");
    
            new Thread(printerA).start();
            new Thread(printerB).start();
            Thread.sleep(100);
            new Thread(printerC).start();
    
        }
    
        private ReentrantLock reentrantLock;
        private Condition thisCondition;
        private Condition nextCondition;
        private String printStr;
    
        public SyncPrinter(ReentrantLock reentrantLock, Condition thisCondition, Condition nextCondition, String printStr) {
            this.reentrantLock = reentrantLock;
            this.thisCondition = thisCondition;
            this.nextCondition = nextCondition;
            this.printStr = printStr;
        }
    
        public void run() {
            try {
                reentrantLock.lock();
                for (int i = 0; i < 10; i++) {
                    System.out.println(printStr);
                    nextCondition.signal();
                    if (i < 9) {
                        thisCondition.await();
                    }
                }
    
            } catch (InterruptedException e) {
                e.printStackTrace();
            } finally {
                reentrantLock.unlock();
            }
        }
    }
  • 相关阅读:
    Mac电脑kernel_task占用内存过高
    Mac上的聚焦搜索无法查找到应用
    Mac电脑变卡的原因:
    IE浏览器整页截屏程序
    拓扑排序算法的一个应用
    简单演示mySQL后端数据库关系信息逆向加入到PowerDesigner的物理数据模型和概念数据模型中
    解密存储过程或函数
    C#画图
    .NET设计模式开篇
    非重复随机序列生成算法
  • 原文地址:https://www.cnblogs.com/newlangwen/p/12586971.html
Copyright © 2011-2022 走看看