利用 Locksupport的两个方法:
park(): 阻塞当前线程
unpark(thread): 唤醒指定线程
public static void main(String[] args) {
Thread a,b,c;
a = new Thread(() -> {
LockSupport.park();
for(int i=0;i<10;i++){
System.out.print(Thread.currentThread().getName());
LockSupport.park();
}
},"a");
b = new Thread(() -> {
LockSupport.park();
for(int i=0;i<10;i++){
System.out.print(Thread.currentThread().getName());
LockSupport.park();
}
},"b");
c = new Thread(() -> {
LockSupport.park();
for(int i=0;i<10;i++){
System.out.print(Thread.currentThread().getName());
LockSupport.park();
}
},"c");
a.start();
b.start();
c.start();
int count = 1;
for(;;){
if(!a.isAlive() && !b.isAlive() && !c.isAlive()){
break;
}
if(count%3 == 1){
LockSupport.unpark(a);
}
if(count%3 == 2){
LockSupport.unpark(b);
}
if(count%3 == 0){
LockSupport.unpark(c);
}
try {
// 主线程休眠10毫秒是为了把cpu的使用权让给 a/b/c 线程
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
count++;
}
}