Java并发编程

本文将对Java中并发编程的重难点作一定解释。

线程安全

  1. 无状态对象永远是线程安全的

    无状态对象指的是没有成员域变量的对象

  2. 原子操作
    自增操作是三个离散操作的简写形式: 获取当前值,加1,写回新值。这是一个 读-改-写 操作的实例,其中,结果的状态衍生自它先前的状态。

  3. 竞争条件
    当计算的正确性依赖于运行时中的相关的时序或者多线程的交替时,会产生竞争条件;换句话说,想要得到正确的答案,要依赖于“幸运”的时序。最常见的一种竞争条件是 检查再运行 ,使用一个潜在的过期值作为决定下一步操作的依据。例如: 你观察到一些事情为真(文件X不存在),然后(then)基于你的观察去执行一些操作(创建文件X);但事实上,从观察到执行操作的这段时间内,观察结果可能已经失效了(有人在此期间创建了文件X),从而引发错误(非预期的异常,重写数据或者破坏文件)。

  4. 复合操作和原子操作

    假设有操作A和B,如果从执行A的线程的角度看,当其他线程执行B时,要么B全部执行完成,要么一点都没有执行,这样A和B互为原子操作。一个原子操作是指: 该操作对于所有的操作,包括它自己,都满足前面描述的状态。

    java.util.concurrent.atomic 包中包括了原子变量类这些类用来实现数字和对象引用的原子状态转换。例如 long 类型替换为 AtomicLong 类型。

  5. 内部锁
    Java提供了强制原子性的内置锁机制: synchronized 块。一个 synchronized 块共有两部分: 锁对象的引用,以及这个锁保护的代码块。 synchronized 方法是对跨越了整个方法体的 synchronized 块的简短描述,至于 synchronized 方法的锁,就是该方法所在的对象本身。

    synchronized (lock){
    // 访问或修改被锁保护的共享状态
    }

    执行 synchronized 块的线程,不可能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值