美文网首页
Java并发编程实战 第2章 线程安全性

Java并发编程实战 第2章 线程安全性

作者: kaiker | 来源:发表于2023-08-05 16:36 被阅读0次

1、什么是线程安全性

当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类线程安全。

2、原子性

由于不恰当的执行时序而出现不正确的结果是一种非常重要的情况,它有一个正式的名字:竞态条件。

  • 最常见的静态条件是先检查后执行,通过一个可能失效的观测结果决定下一步的动作。
  • 要避免竞态条件,就必须在某个线程修改变量时,通过某种方式阻止其他线程使用这个变量。

3、加锁机制

3.1 内置锁

  • 静态的synchronized方法以Class对象为锁。
  • 每个Java对象都可以用作一个实现同步的锁,这些锁被称为内置锁。

3.2 重入

  • 内置锁是可重入的,因此如果某个线程试图获得一个已由它自己持有的锁,那么这个请求就会成功。
public class Widget {
    public synchronized void doSomething() {}
}

public class LoggingWidget extends Widget {
    public synchronized void doSomething() {
        super.doSomething();
    }
}

4、用锁来保护状态

对于每个包含多个变量的不变性条件,其中涉及的所有变量都需要由同一个锁来保护。

5、活跃性与性能

  • 缩小同步代码快的作用范围
  • 当执行时间较长的计算或可能无法快速完成的操作时,一定不要持有锁。

相关文章

网友评论

      本文标题:Java并发编程实战 第2章 线程安全性

      本文链接:https://www.haomeiwen.com/subject/vxabpdtx.html