java框架

  1. 规则1:静态条件

在多线程下,没有依赖关系的代码,在执行共享变量读写操作(至少有一个线程写)时,并不能保证以编写顺序 (Program Order)执行,这称为发生了竞态条件(Race Condition)

注意:静态条件是为了更好的性能。

  1. 规则二:同步动作

同步动作 - 一个线程中代码的执行顺序 若要保证多线程下,每个线程的执行顺序(Synchronization Order)按编写顺序(Program Order)执行,那么 必须使用 Synchronization Actions 来保证,这些 SA 有

lock,unlock - synchronized, ReentrantLock

volatile 方式读写变量 - 保证可见性,防止重排序(它的主要作用)

 VarHandle 方式读写变量

 Synchronization Order 也称之为 Total Order

17、规则三:先行发生

线程切换时代码的顺序和可见性 若是变量读写时发生线程切换(例如,线程 1 写入 x,切换至线程 2,线程 2 读取 x)在这些边界的处理上如果有 action1 先于 action 2 发生,那么代码可以按确定的顺序执行,这称之为 Happens-Before Order 规则

用公式表达为:  

含义为:如果 action1 先于 action2 发生,那么 action1 之前的共享变量的修改对于 action2 可见,且代码按 PO 顺序执行。

  1. 创建一个锁的对象

Static final Object lock = new Object();

加锁的动作:synchronized(lock){}

  1. 在jDK8以上我们可以直接在接口中实现静态方法和抽象方法
  2. 接口中的定义的方法是抽象方法
  3. 默认方法: default 方法类型 方法名(){

}

  1. 默认方法的调用我们要通过当前接口的实例化对象来进行调用
  2. 静态方法:  static 方法的类型 方法名(){

}

  1. 静态方法可以在接口中调用
  2. 接口中的静态方法是不允许重写的

  1. 规则4:因果律

因果律:代码之间如存在依赖关系,即使没有加 SA(同步动作) 操作,代码的执行顺序也是可以预见的

19、

20、

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值