Locksupport类可以实现线程的使用和唤醒
park(): 阻塞当前线程
unpark(thread): 唤醒指定线程
使用举例:a,b,c三个线程同时启动,a线程打印a,b线程打印b,c线程打印c,如何用Java代码实现按顺序打印abc,循环十次。
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++;
}
}