package test; import java.util.concurrent.CountDownLatch; import java.util.concurrent.locks.*; public class ThreadTest { final static ReentrantLock r = new ReentrantLock(); final static Condition condition = r.newCondition(); final static CountDownLatch countDownLatch = new CountDownLatch(3); static volatile long count = 1; static volatile int flag = 1; public static void main(String[] args) throws InterruptedException { Thread threadA = new Thread(() -> { try { r.lock(); while (count <= 999) { while (flag != 1) { condition.await(); if (count > 999) {//防止最后三次打印出现大于999的值 return; } } System.out.println(Thread.currentThread().getName() + ":" + count); count++; flag = 2; condition.signalAll(); } countDownLatch.countDown(); } catch (InterruptedException e) { e.printStackTrace(); } finally { r.unlock(); } }, "A "); Thread threadB = new Thread(() -> { try { r.lock(); while (count <= 999) { while (flag != 2) { condition.await(); if (count > 999) { return; } } System.out.println(Thread.currentThread().getName() + ":" + count); count++; flag = 3; condition.signalAll(); } countDownLatch.countDown(); } catch (InterruptedException e) { e.printStackTrace(); } finally { r.unlock(); } }, "B "); Thread threadC = new Thread(() -> { try { r.lock(); while (count <= 999) { while (flag != 3) { condition.await(); if (count > 999) { return; } } System.out.println(Thread.currentThread().getName() + ":" + count); count++; flag = 1; condition.signalAll(); } countDownLatch.countDown(); } catch (InterruptedException e) { e.printStackTrace(); } finally { r.unlock(); } }, "C "); threadA.start(); threadB.start(); threadC.start(); countDownLatch.await(); System.out.println("main"); } }
三个线程交替打印1~999,最后在主线程输出“main”
Guess you like
Origin blog.csdn.net/shenyipeng9889/article/details/116935264
Recommended
Ranking