如何减少上下文切换
- 无锁并发编程
- CAS算法
- 使用最少的线程
- 协程
什么是死锁
两个或多个线程等待彼此锁释放而无法继续运行形成死锁。
如何避免死锁
- 避免一个线程同时获取多个锁
- 避免一个线程在锁内同时占用多个资源
- 尝试使用定时锁lock.tryLock(timeout)来替代使用内部锁
- 对于数据库锁,加锁和解锁必须在一个数据库连接里
volatile
- lock前缀指令会引起处理器缓存回写到内存
- 一个处理器的缓存回写到内存会导致其他处理器的缓存无效
synchronized java的所有对象都是锁
- 对于同步方法,锁的是当前实例对象
- 对于静态同步方法,锁的是当前类的Class对象
- 对于同步方法块,锁的是Synchonized括号配置的对象