Java多线程 四种需要考虑线程安全的情况

四种需要考虑线程安全的情况

遇到以下四种需要考虑线程安全的情况,需要注意:

  1. 访问共享的变量或资源, 会有并发风险, 比如对象的属性, 静态变量, 共享缓存, 数据库等
    例如此文提到的例子, 用共享变量进行++操作. https://javaweixin6.blog.csdn.net/article/details/108327742
  2. 所有依赖时序的操作, 即使每一步操作都是线程安全的, 还是存在并发的问题.
    read-modify-write: 先读取, 再修改. check-then-act 先检查, 再执行. 实际上本质是一样的, 一个线程先获取数据, 再进行下一步的操作. 主要可能的问题是, 数据读取后, 还有可能被其他线程修改. 所以在这种依赖时序的情况下, 可以用synchronized锁等操作.
  3. 不同的数据之间存在绑定关系的时候.
    例如IP与端口号. 只要修改了IP就要修改端口号, 否则IP也是无效的. 因此遇到这种操作的时候, 要警醒原子的合并操作. 要么全部修改成功, 要么全部修改失败.
  4. 使用其他类的时候, 如果该类的注释声明了不是线程安全的, 那么就不应该在多线程的场景中使用, 而应该考虑其对应的线程安全的类,或者对其做一定处理保证线程安全,
    例如HashMap就不是线程安全的, 而ConcurrentHashMap则是线程安全的.

猜你喜欢

转载自blog.csdn.net/qq_33229669/article/details/108396743