数组
链表
public class Test01 {
public static void main(String[] args) {
new ThreadPoolExecutor(1, 2, 3, TimeUnit.SECONDS, new ArrayBlockingQueue<>(10));
Executors.newFixedThreadPool(3);
}
public synchronized void test() throws InterruptedException {
this.wait();
//不能唤醒指定线程
this.notify();
}
public void test1() throws InterruptedException {
ReentrantLock reentrantLock = new ReentrantLock();
Condition condition = reentrantLock.newCondition();
reentrantLock.lock();
condition.wait();
condition.signal();//唤醒对象
reentrantLock.unlock();
}
public synchronized void test2() throws InterruptedException {
this.wait();
//不能唤醒指定线程
this.notify();
// 跨方法唤醒
condition.signal();
}
ReentrantLock reentrantLock = new ReentrantLock();
Condition condition = reentrantLock.newCondition();
public void test3() throws InterruptedException {
reentrantLock.lock(); //线程状态的切换.比较消耗性能
condition.wait();
reentrantLock.unlock();
}
public void test5() throws InterruptedException {
for (; ; ) { //自旋消耗性能 cpu
// compare and set 使用操作系统得指令保证原子性
// 0--->1 i compare 0 1
if (Unsafe.getUnsafe().compareAndSwapInt()) {
// 只有一个线程能成功
// 执行操作
LockSupport.park();//线程状态切换 相当于加锁了
LockSupport.unpark(new Thread());
return;
}
}
}
}
线程状态切换,比较消耗性能,有限自旋次数,