java多线程(2)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011747152/article/details/80349993

1.synchronized 锁重入:线程请求由自己持有的对象时,如果该锁是重入锁,请求就会成功,否则阻塞
2.synchronized出现异常时,锁自动释放
3.当多个线程要同一个实例时
双重校验锁

public class DubbleSingleton {

    private static volatile DubbleSingleton instance;

    public static DubbleSingleton getInstance(){
        if(instance == null){
            try {
                //模拟初始化对象的准备时间...
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            //类上加锁,表示当前对象不可以在其他线程的时候创建
            synchronized (DubbleSingleton.class) { 
                //如果不加这一层判断的话,这样的话每一个线程会得到一个实例
                //而不是所有的线程的到的是一个实例
                if(instance == null){ 
                    instance = new DubbleSingleton();
                }
            }
        }
        return instance;
    }
}

上面用到了volatile ,下面说下volatile的作用

  1. volatile关键字的作用就是强制从公共堆栈中取得变量的值,而不是从线程私有栈中取
  2. volatile 解决的是变量在多个线程之间的可见性,而 synchronized 解决的是多个线程之间访问资源的同步性
阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页