用多线程进行A,B,C不同次数的打印,规则:A 打印5次,B打印4次,C打印15次,A打印完B打印,B打印完C打印,循环10次 package com.atguigu.springcloud.controller; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class LockDemo { private static int number =1; private static Lock lock = new ReentrantLock(); private static Condition condA = lock.newCondition(); private static Condition condB = lock.newCondition(); private static Condition condC = lock.newCondition(); public static void printA(){ lock.lock(); try { if(number != 1){ condA.await(); } for(int i=1;i<=5;i++){ System.out.println("线程A"+" "+i); } number=2; condB.signal(); }catch (Exception e){ System.out.println(e); }finally { lock.unlock(); } } public static void printB(){ lock.lock(); try { if(number != 2){ condB.await(); } for(int i=0;i<=4;i++){ System.out.println("线程B"+" "+i); } number = 3; condC.signal(); }catch (Exception e){ }finally { lock.unlock(); } } public static void printC(){ lock.lock(); try { if(number != 3){ condC.await(); } for(int i=1;i<=15;i++){ System.out.println("线程C"+" "+i); } number = 1; condA.signal(); }catch (Exception e){ }finally { lock.unlock(); } } public static void main(String [] args){ new Thread(()->{ for (int i=0;i<10;i++){ printA(); } },"A").start(); new Thread(()->{ for(int i=0;i<10;i++){ printB(); } },"B").start(); new Thread(()->{ for(int i =0;i<10;i++){ printC(); } },"C").start(); } }
重入锁ReentrantLock实例
最新推荐文章于 2023-05-11 21:59:25 发布