1.LockSupport
LockSupport.park();
LockSupport.unPark(Thread t);
park和unpark次数问题,可以先调用unpark再调用park,但是先unpark N次只会生效一次
2. wait和notify[必须配合synchronized使用]
obj.notify唤醒等待线程
obj.wait让出锁 自己进入等待的 waitSet 【会处于阻塞状态】
3.signal和await [在唤起等待线程的时候,比synchronized的notify灵活的多]
Lock lock = new ReentraLock();
Condition conditionQueue1 = lock.newCondition();
Condition conditionQueue2 = lock.newCondition();
condition2. signal(); //叫醒queue2里面等待的线程
condition1.await();//把自己阻塞在queuq1