✨ selector
parent
667e179af7
commit
db64b43399
@ -0,0 +1,42 @@
|
|||||||
|
package org.alis.smallcc.algorithm.thread;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 顺序打印奇数 偶数
|
||||||
|
* @author alis
|
||||||
|
*/
|
||||||
|
public class OrderPrintThread {
|
||||||
|
|
||||||
|
private final Object monitor = new Object();
|
||||||
|
private final int limit;
|
||||||
|
private volatile int count;
|
||||||
|
|
||||||
|
OrderPrintThread(int initCount, int times) {
|
||||||
|
this.count = initCount;
|
||||||
|
this.limit = times;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void print() {
|
||||||
|
|
||||||
|
synchronized (monitor) {
|
||||||
|
while (count < limit){
|
||||||
|
try {
|
||||||
|
System.out.printf("线程[%s]打印数字:%d%n", Thread.currentThread().getName(), ++count);
|
||||||
|
monitor.notifyAll();
|
||||||
|
monitor.wait();
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
Thread.currentThread().interrupt();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//防止有子线程被阻塞未被唤醒,导致主线程不退出
|
||||||
|
monitor.notifyAll();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
OrderPrintThread printer = new OrderPrintThread(0, 10);
|
||||||
|
new Thread(printer::print, "odd").start();
|
||||||
|
new Thread(printer::print, "even").start();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue