跳到主要内容

如何保证线程安全?

富柯斯一面

基本点
  • 无状态: 多个线程访问公共资源会出现数据不安全,那么没有公共资源久不会有问题了
  • 不可变: 公共资源不可变的话,也不会出现数据不安全问题
  • 无修改权限(只读): 公共资源只暴露读权限,不暴露写权限
  • 互斥锁
  • 分布式锁:互斥锁仅限于单机,在分布式场景下,可以用 redis、zookeeper 等实现分布式锁
  • 原子操作
  • 线程局部存储: 为每个线程创建副本,避免共享

Reference