1、顺序输出
比如,必须先2后1。
-
wait与notify实现
static final Object lock = new Object(); //表示t2是否运行过 static boolean t2runned = false; public static void main(String[] args) { Thread t1 = new Thread(() -> { synchronized (lock) { while (!t2runned) { try { locak.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } log.debug("1"); } },"t1"); Thread t2 = new Thread(() -> { synchronized (lock) { log.debug("2"); t2runned = true; lock.notify(); } },"t2"); t1.start(); t2.start(); }
-
park与unpark实现
2、交替输出
-
wait与notify实现
/* 输出内容 等待标记 下一个标记 a 1 2 b 2 3 c 3 1 */ class WaitNotify { //打印 public void print(String str,int waitFlag, int nextFlag) { synchronized(this) { while(flag != waitFlag) { try { this.wait(); } catch (InterruptedExcepton e) { e.printStackTrace(); } } System.out.print(str); flag = nextFlag; this.notifyAll(); } } //等待标记 private int flag; //循环次数 private int loopNumber; public WaitNotify(int flag,int loopNumber) { this.flag = flag; this.loopNumber = loopNumber; } }
-
await与singal实现
-
park与unpark实现