wait()与sleep()区别
- wait()属于Object对象,sleep()属于Thread对象;
- wait会释放锁,sleep不会释放锁;
- 使用范围不同,wait必须使用在同步代码块中,sleep可以用在任何地方
wait需要被唤醒(唤醒:notify、notifyall),sleep不需要
Synchronized与Lock区别
synchronized Java内置关键字,Lock是一个Java类
- Synchronized无法判断获取锁的状态,Lock可以判断是否是否获到了锁
- synchronized会自动释放锁,Lock必须释放锁,如果不释放锁,死锁
- synchronized 线程1(获得锁,阻塞)、线程2(等待,一直等);Lock锁可以使用tryLock()尝试获取锁
- synchronized 可重入锁,不可中断,非公平;Lock 可重入锁,可以判断锁,非公平(可设置)
- synchronized 适合锁少量的代码同步问题,Lock适合锁大量的同步代码
阻塞队列
| 方式 | 抛出异常 | 有返回值,不抛出异常 | 阻塞 等待 | 超时 等待 | | —- | —- | —- | —- | —- | | 添加 | add | offer | put | offer | | 删除 | remove | poll | take | poll | | 检查队首元素 | element | peek | - | - |