Java实现线程安全的几种方式:常量/数据私有/互斥同步/非阻塞同步

1.常量:
数据声明成常量,使数据无法被修改,则一定线程安全。

  • final声明的基本数据类型
  • String
  • 枚举类型

2.数据私有
将数据变成线程私有的数据

  • 栈(局部变量):多个线程访问同一个方法的局部变量时,不会出现线程安全问题,因为局部变量存储在虚拟机栈中,属于线程私有的。
  • Thread Local:线程本地存储机制

3.互斥同步
java提供锁机制控制多线程对共享资源的访问,只允许获取锁的线程执行。

  • synchronized:JVM实现
  • ReentrantLock:JDK实现
    线程的阻塞和唤醒消耗性能,影响程序的性能。适合修改多的场景。

4.非阻塞同步
先进行操作,如果没有其它线程争用共享数据,那操作就成功

  • CAS机制:乐观锁
  • 版本号
  • 原子类AtomicInteger:CAS机制
    适合查询多修改少的场景。

你可能感兴趣的:(java,开发语言)