java 多线程的单例模式,Java多线程中的单例模式两种实现方式
Java多线程中的单例模式
一、在多线程环境下创建单例
方式一:
package com.ietree.multithread.sync;
public class Singletion {
private static class InnerSingletion {
private static Singletion single = new Singletion();
}
public static Singletion getInstance() {
return InnerSingletion.single;
}
}
方式二:
package com.ietree.multithread.sync;
public class DubbleSingleton {
private static DubbleSingleton ds;
public static DubbleSingleton getDs() {
if (ds == null) {
try {
// 模拟初始化对象的准备时间...
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (DubbleSingleton.class) {
if (ds == null) { // 这个判断很重要,如果没有那将不是单例,而是多例
ds = new DubbleSingleton();
}
}
}
return ds;
}
public static void main(String[] args) {
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println(DubbleSingleton.getDs().hashCode());
}
}, "t1");
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println(DubbleSingleton.getDs().hashCode());
}
}, "t2");
Thread t3 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println(DubbleSingleton.getDs().hashCode());
}
}, "t3");
t1.start();
t2.start();
t3.start();
}
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
java 多线程的单例模式,Java多线程中的单例模式两种实现方式相关推荐
- PCBA加工中常见的两种焊接方式详解
PCBA加工中常见的两种焊接方式详解 PCBA加工,两种常见的焊接方式就是回流焊和波峰焊,与手动焊接技术相比,自动焊接技术具有减少人为因素的影响.提高效率.降低成本.提高质量等优势,在PCBA加工中, ...
- java匿名内部类_java中匿名内部类的两种实现方式
使用匿名内部类课使代码更加简洁.紧凑,模块化程度更高.内部类能够访问外部内的一切成员变量和方法,包括私有的,而实现接口或继承类做不到.然而这个不是我说的重点,我说的很简单,就是匿名内部类的两种实现方式 ...
- python wait until_荐selenium显示等待怎么写之WebDriverWait中until的两种实现方式及原理分析...
关于显示等待WebDriverWait是什么,可以看selenium-wait源码解析 话不多说,先上实现代码: 第一种实现方式(官方提供): from selenium.webdriver.supp ...
- Spring中AOP的两种代理方式(Java动态代理和CGLIB代理)
第一种代理即Java的动态代理方式上一篇已经分析,在这里不再介绍,现在我们先来了解下GCLIB代理是什么?它又是怎样实现的?和Java动态代理有什么区别? cglib(Code Generation ...
- android编程fragment,详解Android中Fragment的两种创建方式
onCreate():在创建fragment时系统会调用此方法.在实现代码中,你可以初始化想要在fragment中保持的那些必要组件,当fragment处于暂停或者停止状态之后可重新启用它们. onC ...
- C语言中字符串的两种定义方式
我们知道C语言中是没有字符串这种数据类型的,我们只能依靠数组进行存储,即字符数组,而我们定义并且初始化数组有两种方式.下面将给大家介绍这两种方式并且介绍这两种方式的区别: 方式1 前两种是正确的定义方 ...
- SAP License:SAP系统中本年利润的两种结转方式
结转本年利润的方法(SAP使用表解法) 会计期末结转本年利润的方法有表结法和账结法两种. 1.表结法 表结法下,各损益类科目每月月末只需结计出本月发生额和月末累计余额,不结转到"本年利润&q ...
- java的login_Java中login的两种实现方式
方式一:将VO的东西封装到Action里面 编写Action方法 package action; import com.opensymphony.xwork2.ActionSupport; publi ...
- Myeclipse中Tomcat的两种部署方式
一.在Myeclipse软件中部署 1. 在Myeclipse中,创建好工程后,在Myeclipse菜单栏中选择 Windows -> Preferences -> Myeclipse - ...
- spring中bean的两种注入方式
一是依赖注入(构造方法) 二是set注入(属性的set方法) 转载于:https://www.cnblogs.com/l-x-x-y-d-j/p/11355137.html
最新文章
- 华中科技大学通报:取消张某某研究生导师资格,调离教师岗位,停止其教师资格...
- pyav Invalid data found when processing input (libav.h264: no frame!)
- python【Matlibplot绘图库】绘制用于学术论文投稿的黑白图片
- Asp.Net 构架(Http Handler 介绍) - Part.2
- VS2005工程的Device右边内容为空问题
- Python基础入门:高效的集合操作
- 每日软件进度报告—12月6日
- YUI 的模块信息配置优先级关系梳理
- 如何绘制吞吐率曲线图
- 解决方案:超卖(Redis原子队列)
- 出现问题protected:void __thiscall CTalkCDlg::OnIdok(void)(?OnIdok@CTalkDlg@@IAEXXZ)?
- 数据库工作笔记002---Linux下开启,重启,关闭mysql
- windows 编写的硬件驱动_黑科技or大势所趋?谈谈手机GPU驱动升级那点事
- 简单的jsp代码(登录界面)
- LeetCode 罗马数字
- psCS6图片文件无法直接拖入的解决方法
- Eclipse 各种设置
- 常用的sql语句,sql使用大全
- 微软 Surface Laptop 系统恢复
- c语言编译器uwp版,Win10技巧:注册UWP版文件资源管理器