Java并发编程

避免死锁的几个常见方法

  • 避免同一个线程同时获取多个锁
  • 避免一个线程在锁内同时占用多个资源,尽量保证每个锁只占用一个资源
  • 尝试使用定时锁,使用lock.tryLock(timeout) 来替代内部锁机制
  • 对于数据库锁,加锁和解锁必须在一个数据库连接中,否则会出现解锁失败的情况。

CAS实现原子操作的三大问题

  • ABA问题
  • 循环时间长,开销大
  • 只能保证一个共享变量的原子操作:可以把多个变量合并成一个变量

线程之间的通信机制

  • 共享内存
    • 线程之间共享程序的公共状态,通过写-读内存中的公共状态进行隐式通信
    • 这共享内存并发模型里,同步是显式进行的
  • 消息传递
    • 线程之间没有公共状态,通过发送消息来显式通信
    • 由于消息的发送必须在消息的接收之前,因此同步是隐式进行的

指令重排序

类型:

  • 编译器优化的重排序
  • 指令级并行的重排序
  • 内存系统的重排序

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!

「面试」微软 上一篇
「面试」B站 下一篇