懒汉式的安全优化方式,两种方式。线程同时运行的时候,不会创建两个对象
来源:互联网 发布:stm32 压缩算法 编辑:程序博客网 时间:2024/06/01 08:47
/** * 懒汉式的安全优化方式,两种方式。 * * @author jiaxutianhuo * */public class Singleton {// 私有化构造private Singleton() {// 私有化构造函数,不能用new Singleton来创造对象。// 只能通过getInstance创造对象,也就是用同一个对象。System.out.println("对象创建成功。");}// 全局对象private static Singleton singleton = null;// 懒汉式是非线程安全的。解决方式如下:// 关键字:synchronized:可用来给对象和方法或者代码块加锁,// 当它锁定一个方法或者一个代码块的时候,同一时刻最多只要一个线程执行这个代码。public static synchronized Singleton getInstance() {// 判断全局对象是否为空。if (singleton == null) {try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();} // 休眠一秒钟,检测多线程的运行情况。// 如果为空,就创建该类对象。singleton = new Singleton();}// 如果不为空,就直接返回该对象。// 因为第一次创建的时候,就不为空了,// 所以在此创建的时候,判断不为空,直接返回该对象,// 所以两个对象是代表的一个对象。就是第一次创建的对象。return singleton;}///**// * 使用双重检测机制,实现线程安全的懒汉式// * @return// *///public static Singleton getInstance() {//// 判断全局对象是否为空。//if (singleton == null) {//synchronized(Singleton.class){//if (singleton == null) {//singleton = new Singleton();//}//}////}//return singleton;//}public static void main(String[] args) {//多线程操作//创建多线程方式2:直接使用Thread操作/** * 如果没有synchronized,就会被两个线程同时创建,创建两个对象。 */Thread thread1=new Thread(){@Overridepublic void run() {// TODO Auto-generated method stub//Singleton ton=Singleton.getInstance();System.out.println(ton.hashCode());}};thread1.start();Thread thread2=new Thread(){@Overridepublic void run() {// TODO Auto-generated method stubSingleton ton2=Singleton.getInstance();System.out.println(ton2.hashCode());}};//开启新线程thread2.start();//此方法创建对象,ton1和ton2是同一个对象。}}
阅读全文
1 0
- 懒汉式的安全优化方式,两种方式。线程同时运行的时候,不会创建两个对象
- 创建单例的两种方式(懒汉式&GCD)
- 两种创建单例模式的方式-懒汉式与饿汉式
- 单例模式的两种方式:懒汉式、饿汉式
- 线程创建的两个方式
- 创建线程两种方式的比较
- java 创建线程 的两种方式
- 创建线程两种方式的比较
- 创建线程的两种方式
- 创建线程的两种方式
- 多线程 创建线程的两种方式
- 创建线程的两种方式
- Java线程创建的两种方式
- 创建线程的两种方式
- 创建线程的两种方式
- 创建线程的两种方式。
- java创建线程的两种方式
- 线程的两种创建方式
- JavaScript学习
- C/C++中extern关键字详解
- number one
- 封装HttpUtil访问网络的耗时操作
- (三)Vue.js v-for循环遍历 20170818
- 懒汉式的安全优化方式,两种方式。线程同时运行的时候,不会创建两个对象
- python—beautifulsoup介绍与安装使用
- Xmind-超链接
- 垃圾回收器与内存分配策略
- SQL左右连接中的on and和on where的区别
- FreeRtos内存管理
- sublime 3 与git 与github三者之间协调合作
- 排序算法之归并排序
- 【死磕Java并发】-----J.U.C之阻塞队列:SynchronousQueue