[置顶] Java 多线程学习笔记(十一) 单例设计模式(延迟加载/懒汉模式)DCL解决线程安全问题
2016-07-04 14:04
615 查看
package extthread; import test.MyObject; public class MyThread extends Thread { @Override public void run() { System.out.println(MyObject.getInstance().hashCode()); } }
package test; public class MyObject { private volatile static MyObject myObject; private MyObject() { } // 使用双检测机制来解决问题 // 即保证了不需要同步代码的异步 // 又保证了单例的效果 public static MyObject getInstance() { try { if (myObject != null) { } else { // 模拟在创建对象之前做一些准备性的工作 Thread.sleep(3000); synchronized (MyObject.class) { if (myObject == null) { myObject = new MyObject(); } } } } catch (InterruptedException e) { e.printStackTrace(); } return myObject; } // 此版本的代码称为: // 双重检查Double-Check Locking }
package test.run; import extthread.MyThread; public class Run { public static void main(String[] args) { MyThread t1 = new MyThread(); MyThread t2 = new MyThread(); MyThread t3 = new MyThread(); t1.start(); t2.start(); t3.start(); } }
单例设计模式DCL双检查锁机制
运行结果:
322722178
322722178
322722178
相关文章推荐
- Elasticsearch java API (22)查询 DSL Joining查询
- spring 定时任务注入sessionfactory
- DBCP连接池配置参数说明 .
- [深入浅出] 回调方法介绍之中国好室友篇(Java示例)
- 4.盘点springmvc的常用接口之PropertyEditor
- java list随机打乱
- java算法之二分查找
- SpringMVC 之 表单标签
- rxjava的使用(简洁易懂)
- 在使用Spring AOP时,遇到转换错误:
- Java知识图谱收集整理
- 原 spring boot 拦截器中无法注入serivce
- Java 远程通讯技术及原理分析
- Java开发环境搭建 Path以及Classpath环境变量的配置
- 2015蓝桥杯决赛Java A组 第四题--穿越雷区
- 成为Java高手的25个学习要点
- Random类使用心得
- Spring 4.3 的新功能和增强
- Java编程常见问题汇总
- 测试框架的利好和繁荣:Java单元测试框架之争