在JAVA中使用DCL双检查锁机制实现单例的多线程安全

元旦放假期间学代码,我都感动我自己啦。

试过了,OK的。

package demo.thread;

public class MyObject {
	private static MyObject myObject ;
	private MyObject() {

	}
	public static MyObject getInstance() {
		try {
			if (myObject != null){

			} else {
				Thread.sleep(3000L);
				synchronized (MyObject.class) {
					if (myObject == null){
						myObject = new MyObject();
					}

				}

			}

		} catch (InterruptedException e) {
			e.printStackTrace();
		}

		return myObject;
	}

}
package demo.thread;

public class MyThread extends Thread {
	@Override
	public void run() {
		System.out.println(MyObject.getInstance().hashCode());
	}

}
package demo.thread;

public class Run {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		MyThread t1 = new MyThread();
		t1.start();

		MyThread t2 = new MyThread();
		t2.start();

		MyThread t3 = new MyThread();
		t3.start();

	}

}

时间: 2024-09-23 14:17:43

在JAVA中使用DCL双检查锁机制实现单例的多线程安全的相关文章

关于JAVA中事件分发和监听机制实现的代码实例

文章标题:关于JAVA中事件分发和监听机制实现的代码实例 文章地址: http://blog.csdn.net/5iasp/article/details/37054171 作者: javaboy2012 Email:yanek@163.com qq:    1046011462     一.场景假设 假设有博客系统中需要实现如下功能: 系统中用户发布文章,修改文章,删除文章时,需要一些相关的操作需要执行. 发布文章后,给好友发送邮件通知,给用户加积分,对文章做全文索引. 修改文章后,给好友发送

java中基于线程池和反射机制实现定时任务

文章标题:java中基于线程池和反射机制实现定时任务 文章地址: http://blog.csdn.net/5iasp/article/details/10949925 作者: javaboy2012 Email:yanek@163.com qq:    1046011462       直接上代码:   主要包括如下实现类: 1. Main类: 任务执行的入口: 调用main方法,开始加载任务配置并执行任务   package com.yanek.task; import java.util.

Java中使用WebUploader插件上传大文件单文件和多文件的方法小结_java

一.使用webuploader插件的原因说明 被现在做的项目坑了. 先说一下我的项目架构spring+struts2+mybatis+MySQL 然后呢.之前说好的按照2G上传就可以了,于是乎,用了ajaxFileUpload插件,因为之前用图片上传也是用这个,所以上传附件的时候就直接拿来用了 各种码代码,测试也测过了,2G文件上传没问题,坑来了,项目上线后,客户又要求上传4G文件,甚至还有20G以上的..纳尼,你不早说哦... 在IE11下用ajaxFileUpload.js插件上传超过4G的

java 中 if (someobject != null) 检查对象是否为空的问题

先我们来看下面代码,对于这样的对象为空的检查: if (someobject != null) {     someobject.doCalc(); } 为了避免空指针异常,看起来也没什么不妥.不过代码里面一片一片的对象是否为空的判断,实在难看. 对象是否为空的契约 通常我们在定义API的时候,是遵循一些规矩的,这些规矩可以叫做规约,比如这样的接口: public Set<String> getCollections(); 通常情况下,或者说没有特殊说明的情况下,返回的set是不能为null的

深入分析MSSQL数据库中事务隔离级别和锁机制_MsSql

锁机制 NOLOCK和READPAST的区别. 1.       开启一个事务执行插入数据的操作. BEGIN TRAN t INSERT INTO Customer SELECT 'a','a' 2.       执行一条查询语句. SELECT * FROM Customer WITH (NOLOCK) 结果中显示"a"和"a".当1中事务回滚后,那么a将成为脏数据.(注:1中的事务未提交) .NOLOCK表明没有对数据表添加共享锁以阻止其它事务对数据表数据的修

深入分析MSSQL数据库中事务隔离级别和锁机制

锁机制 NOLOCK和READPAST的区别. 1.       开启一个事务执行插入数据的操作. BEGIN TRAN t INSERT INTO Customer SELECT 'a','a' 2.       执行一条查询语句. SELECT * FROM Customer WITH (NOLOCK) 结果中显示"a"和"a".当1中事务回滚后,那么a将成为脏数据.(注:1中的事务未提交) .NOLOCK表明没有对数据表添加共享锁以阻止其它事务对数据表数据的修

Java中使用Preconditions来检查传入参数介绍_java

Preconditions是Guava中的一个类库,用于检查传入参数,一个常见用法如下: boolean findElement(List<String> elements, String desiredElement) { checkNotNull(elements); // ... } 用法简单明了,就是检查参数elements是不是null,如果是null则扔出NullPointerException.当然Preconditions类里还有其它方法,可能满足几乎所有的传入参数的检查.Pr

深入分析Java中webwork的文件上传机制

点击上传按钮后,webwork的程序流如下: step 1)进入ServletDispatcher.service public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException { ........ request = wrapRequest(request); ......... } step2)进入ServletDispatcher.wrapReque

【转载】JAVA序列化/反序列化与单例

本文转载自http://shift-alt-ctrl.iteye.com/blog/1842040   单例设计类:   Java代码   package com.test.singleton;      import java.io.IOException;   import java.io.ObjectStreamException;   import java.io.Serializable;         public class SingleTon implements Serial