JUC并发编程九 并发架构--循环打印
生活随笔
收集整理的這篇文章主要介紹了
JUC并发编程九 并发架构--循环打印
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
使用wait-notify方式實現循環打印
import lombok.extern.slf4j.Slf4j;@Slf4j(topic = "c.TestCycle") public class TestCycle {public static void main(String[] args) {WaitNotify waitNotify = new WaitNotify(1,5);new Thread(()->{waitNotify.print("a",1,2);}).start();new Thread(()->{waitNotify.print("b",2,3);}).start();new Thread(()->{waitNotify.print("c",3,1);}).start();}}class WaitNotify{private int flag; // 初始的狀態值,使用整數作為標記private int loopNum;public WaitNotify(int flag, int loopNum){this.flag = flag;this.loopNum = loopNum;}public void print(String str, int flag, int nextFlag){for (int i = 0; i < loopNum; i++) {synchronized (this){while(this.flag != flag){try {this.wait();} catch (InterruptedException e) {e.printStackTrace();}}System.out.print(str);this.flag = nextFlag;this.notifyAll();}}} }使用await-signal方式打印
import lombok.extern.slf4j.Slf4j;import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.ReentrantLock;@Slf4j(topic = "c.TestCycle") public class TestCycle {static AwaitSignal awaitSignal = new AwaitSignal(5);public static void main(String[] args) {Condition a = awaitSignal.newCondition();Condition b = awaitSignal.newCondition();Condition c = awaitSignal.newCondition();new Thread(()->{awaitSignal.print("a",a,b);}).start();new Thread(()->{awaitSignal.print("b",b,c);}).start();new Thread(()->{awaitSignal.print("c",c,a);}).start();try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}awaitSignal.lock();try{a.signal();}finally {awaitSignal.unlock();}} }class AwaitSignal extends ReentrantLock {private int loopNum;public AwaitSignal(int loopNum){this.loopNum = loopNum;}public void print(String str, Condition current, Condition nextCondition){for (int i = 0; i < loopNum; i++) {lock();try{current.await();System.out.print(str);nextCondition.signal();}catch (InterruptedException e) {e.printStackTrace();}finally {unlock();}}} }總結
以上是生活随笔為你收集整理的JUC并发编程九 并发架构--循环打印的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JUC并发编程八 并发架构--Reent
- 下一篇: JUC并发编程九 并发架构--CAS