文档章节

java 23种模式 单例模式

嗯嗯是哦
 嗯嗯是哦
发布于 2017/04/01 16:10
字数 237
阅读 6
收藏 2
public class Test {
    static ExecutorService pool = Executors.newFixedThreadPool(2000);
    public static void main(String[] arg){
        List<Callable<String>> tasks = new LinkedList<>();
        for(int i=0;i<2000;i++){
            tasks.add(()->{
                System.out.println(Thread.currentThread().getName()+":"+Instance.getInstance());
                return "";
            });
        }
        try{
            pool.invokeAll(tasks);
        }catch (InterruptedException e){
            e.printStackTrace();
        }
        System.out.println("完成---》");
    }
}
class Instance{
    volatile static Instance instance = null;
    public static Instance getInstance(){
        if(instance==null){
            System.out.println(Thread.currentThread().getName()+": ready in");
            synchronized(instance){
                System.out.println(Thread.currentThread().getName()+": in");
                if(instance==null){
                    System.out.println(Thread.currentThread().getName()+":实例化");
                    instance = new Instance();
                }
            }
        }
        return instance;
    }
    private static class InnerInstance{
        static Instance  instance  = new Instance();
    }
    public static Instance getInstance2(){
        return InnerInstance.instance;
    }
}

以上是单例模式的 使用双重锁 和 内部类的实现方式,

当时你会发现在对instance加锁的时候,不会有一个线程阔以拿到这个锁,因为空对象应该虚拟机不会分配一个monitor,也就拿不到锁了

所以你必须得修改成对一个obj的加锁

static Object obj = new Object();

synchronized(obj){......}

这样;

还有为何要在instance 前面加一个volatile?

由于volatile可见性,不然会出现实例化多次的结果。

 

 

 

 

© 著作权归作者所有

共有 人打赏支持
嗯嗯是哦
粉丝 3
博文 11
码字总数 6112
作品 0
南昌
私信 提问
设计模式 2014-12-19

book: 阎宏《JAVA与模式》 架构设计栏目 http://blog.csdn.net/enterprise/column.html 概要: http://bbs.csdn.net/forums/Embeddeddriver 23种设计模式分别是: 1.单例模式 2.工厂方法模式...

jayronwang
2014/12/19
0
0
设计模式15——Template Method设计模式

Template Method模板方法设计模式定义一个操作中算法的骨架,将具体步骤的执行延迟到子类中实现。Java中的抽象类就是使用了模板方法设计模式。模板方法设计模式结构如下: 以文档处理为例,T...

小米米儿小
2014/01/24
0
0
java中23种设计模式(上)

参考网址:http://blog.csdn.net/zhangerqing 资源:http://download.csdn.net/detail/zhangerqing/4835830 设计模式(Design Patterns) 设计模式(Design pattern)是一套被反复使用、多数...

青涩的梦
2018/06/26
0
0
练就Java24章真经—你所不知道的工厂方法

前言 最近一直在Java方向奋斗《终于,我还是下决心学Java后台了》,今天抽空开始学习Java的设计模式了 。计划有时间就去学习,你这么有时间,还不来一起上车吗? 之所以要学习Java模式,是因...

codeGoogle
2018/10/30
0
0
java 23种设计模式 深入理解

以下是学习过程中查询的资料,别人总结的资料,比较容易理解(站在各位巨人的肩膀上,望博主勿究) 创建型 抽象工厂模式 http://www.cnblogs.com/java-my-life/archive/2012/03/28/2418836.html ...

wc_飞豆
2018/03/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring学习记录

Java类定义配置 @Configuration //标记为配置类@ComponentScan //标记为扫描当前包及子包所有标记为@Component的类@ComponentScan(basePackageClasses = {接口.class,...}) //标记为扫描当...

CHONGCHEN
今天
1
0
如何开发一款以太坊(安卓)钱包系列2 - 导入账号及账号管理

这是如何开发一款以太坊(安卓)钱包系列第2篇,如何导入账号。有时用户可能已经有一个账号,这篇文章接来介绍下,如何实现导入用户已经存在的账号。 导入账号预备知识 从用户需求上来讲,导...

Tiny熊
今天
3
0
intellJ IDEA搭建java+selenium自动化环境(maven,selenium,testng)

1.安装jdk1.8; 2.安装intellJ; 3.安装maven; 3.1 如果是单前用户,配置用户环境变量即可,如果是多用户,则需配置系统环境变量,变量名为MAVEN_HOME,赋值D:\Application\maven,往path中...

不最醉不龟归
今天
4
0
聊聊ShenandoahGC的Brooks Pointers

序 本文主要研究一下ShenandoahGC的Brooks Pointers Shenandoah Shenandoah面向low-pause-time的垃圾收集器,它的GC cycle主要有 Snapshot-at-the-beginning concurrent mark包括Init Mark(P......

go4it
昨天
4
0
Makefile通用编写规则

#简单实用的Makefile模板: objs := a.o b.o test:$(objs) gcc -o test $^ # .a.o.d .b.o.d dep_files := $(foreach f,$(objs),.$(f).d) dep_files := $(wildcard $(dep_files)) ifneq ($(d......

shzwork
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部