并发原理1

  1. volatile是如何来保性?
          如果声明了volatile行 写 操作,JVM就会向理器送一条Lock的指令,将量所在存行的数据写回到系内存。
       每个理器通嗅探在总线播的数据来检查自己存的是不是期了,当理器发现自己存行对应的内存地址被修改,就会将当前理器的存行置成无效状态。
       当理器对这个数据行修改操作的候,会重新从系内存中把数据理器里。



  1. SynchonizedJVM里的实现原理?
               JVM基于入和退出Monitor象来实现方法同步和代码块同步
          代码块同步是使用monitorentermonitorexit指令实现
          monitorenter指令是在编译后插入到同步代码块的开始位置,而monitorexit是插入到方法和异常JVM要保每个monitorenter对应monitorexit与之配。任何象都有一个monitor与之关,当且一个monitor被持有后,它将定状线monitorenter指令,将会尝试获象所对应monitor的所有,即尝试获象的







happens-before规则
1)程序规则:一个线程中的每个操作,happens-before该线程中的任意后操作。
2监视锁规则一个的解happens-before于随后对这的加
3volatile规则一个volatile域的写,happens-before于任意后续对这volatile域的
4传递性:如果A happens-before B,且B happens-before C,那么A happens-before C
5start()规则:如果线A行操作ThreadB.start()(启动线B),那么A线程的ThreadB.start()操作happens-before线B中的任意操作。
6join()规则:如果线A行操作ThreadB.join()并成功返回,那么线B中的任意操作happens-before线AThreadB.join()操作成功返回。










public class SafeDoubleCheckedLocking {
     private volatile static Instance instance;
     public static Instance getInstance() {
          if (instance == null) {
               synchronized (SafeDoubleCheckedLocking.class) {
                    if (instance == null)
                         instance = new Instance(); // instance为volatile,现在没问题了
               }
          }
          return instance;
     }
}
对实例字段使用线安全的延初始化,使用基于volatile的延初始化的方案
字段使用线程安全的延初始化,使用基于初始化的方案
public class InstanceFactory {
     private static class InstanceHolder {
          public static Instance instance = new Instance();
     }
     public static Instance getInstance() {
          return InstanceHolder.instance ;  // 这里将导致InstanceHolder类被初始化
     }
}









中断可以理解为线程的一个标识位属性,它表示一个运行中的线程是否被其他线了中断操作。中断好比其他线对该线程打了个招呼,其他线程通过调该线程的interrupt()
方法行中断操作。
线程通过检查自身是否被中断来行响线程通方法isInterrupted()行判断是否被中断,也可以用静方法Thread.interrupted()当前线程的中断标识行复位。
如果线程已经处终结,即使该线程被中断,在该线象的isInterrupted()依旧会返false
多声明抛出InterruptedException的方法(例如Thread.sleep(long millis)方法)些方法在抛出InterruptedException之前,Java机会先将该线程的中断标识清除,然后抛出InterruptedException,此时调isInterrupted()方法将会返回false











ThreadLocal,即线量,是一个以ThreadLocal为键、任意为值的存储结构。
构被附线程上,也就是一个线程可以根据一个ThreadLocal查询定在
线程上的一个
可以通set(T)方法来置一个,在当前线程下再通get()方法取到原先置的





























































































































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值