java多线程(2)

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 解决的是多个线程之间访问资源的同步性
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011747152/article/details/80349993
个人分类: 多线程
想对作者说点什么? 我来说一句

java学习笔记2(多线程

2011年08月30日 210KB 下载

JAVA多线程探讨 (2).pptx

2011年03月18日 1.11MB 下载

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

不良信息举报

java多线程(2)

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭