并发编程

如何减少上下文切换

  • 无锁并发编程
  • CAS算法
  • 使用最少的线程
  • 协程

什么是死锁

两个或多个线程等待彼此锁释放而无法继续运行形成死锁。

如何避免死锁

  • 避免一个线程同时获取多个锁
  • 避免一个线程在锁内同时占用多个资源
  • 尝试使用定时锁lock.tryLock(timeout)来替代使用内部锁
  • 对于数据库锁,加锁和解锁必须在一个数据库连接里

volatile

  • lock前缀指令会引起处理器缓存回写到内存
  • 一个处理器的缓存回写到内存会导致其他处理器的缓存无效

synchronized java的所有对象都是锁

  • 对于同步方法,锁的是当前实例对象
  • 对于静态同步方法,锁的是当前类的Class对象
  • 对于同步方法块,锁的是Synchonized括号配置的对象
分享到