package com.juc;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.LockSupport;
import java.util.concurrent.locks.ReentrantLock;
public class T04_ThreadSatte {
public static void main(String[] args) throws Exception {
Thread t1 = new Thread(()->{
System.out.println("2: " + Thread.currentThread().getState());
for (int i = 0; i < 3; i++) {
SleepHelp.sleepSecond(1);
System.out.print(i+ " ");
}
System.out.println();
});
System.out.println("1: "+t1.getState());
t1.start();
t1.join();
System.out.println("3: "+t1.getState());
//======================================
Thread t2 = new Thread(()->{
try {
LockSupport.park();
System.out.println("t2 go on!");
TimeUnit.SECONDS.sleep(5);
}catch (InterruptedException e){
e.printStackTrace();
}
});
t2.start();
TimeUnit.SECONDS.sleep(1);
System.out.println("4: "+t2.getState());
LockSupport.unpark(t2);
TimeUnit.SECONDS.sleep(1);
System.out.println("5: "+ t2.getState());
//====================================== sync 拿不到锁,状态是blocked
final Object o = new Object();
Thread t3 = new Thread(()->{
synchronized (o){
System.out.println("t3 得到了锁🔒o");
}
});
new Thread(()->{
synchronized (o){
SleepHelp.sleepSecond(5);
}
}).start();
SleepHelp.sleepSecond(1);
t3.start();
SleepHelp.sleepSecond(1);
System.out.println("6: " + t3.getState());
//====================================== 除了sync 抢不到所是blocked 其它都是 waiting
final Lock lock = new ReentrantLock();
Thread t4 = new Thread(()->{
lock.lock();
System.out.println("t4 得到了锁 😯");
});
new Thread(()->{
lock.lock();
SleepHelp.sleepSecond(5);
lock.lock();
}).start();
SleepHelp.sleepSecond(1);
t4.start();
SleepHelp.sleepSecond(1);
System.out.println("7: " + t4.getState());
//======================================
Thread t5 = new Thread(()->{
LockSupport.park();
});
t5.start();
SleepHelp.sleepSecond(1);
System.out.println("8: "+ t5.getState());
LockSupport.unpark(t5);
}
}
