java单子模式代码 java设计模式之单例模式

java高手能给我看一下以下的单例模式的代码吗? 要详细解答哦。

第二个单例代码不严谨,可能会创建出多个实例。比如有两个线程同时访问getInstance(),当第一个线程进入synchronized块但还没有new的时候,第二个线程也走到if处,这个时候uniqueInstance =null,if返回true,第二个线程就进入了if块,但在synchronized块外面等待,然后第一个线程创建实例,第二个线程也能成功创建实例。

创新互联公司专注于南召企业网站建设,响应式网站,商城网站制作。南召网站建设公司,为南召等地区提供建站服务。全流程按需策划设计,专业设计,全程项目跟踪,创新互联公司专业和态度为您提供的服务

不知道我说得够不够清楚。你可以看看《effective Java》这本书,里面有专门讲到这个问题。

如何用Java实现单例模式

单例模式:就是一个类仅创建一个对象;

public class Singleton {

private static volatile Singleton singleton = null;

private Singleton(){}// 构造方法

public static Singleton getSingleton(){// 单例模式

if(singleton == null){

synchronized (Singleton.class){

if(singleton == null){

singleton = new Singleton();

}

}

}

return singleton;

}    

}

JAVA 采用单例设计模式设计日志处理类,并写出代码

import java.util.Date;

public class Logger {

private static Logger instance;

private static Class clazz;

private Logger() {

}

private Logger(Class clazz) {

this.instance = new Logger();

this.clazz = clazz;

}

public static Logger getLogger(Class clazz) {

if (instance == null) {

synchronized (Logger.class) {

if (instance == null) {

instance = new Logger(clazz);

}

}

}

return instance;

}

public void info(String msg) {

System.out.println(clazz.getName() + "[" + new Date().toLocaleString()

+ "][info]:" + msg);

}

public void error(String msg) {

System.out.println(clazz.getName() + "[" + new Date().toLocaleString()

+ "][error]:" + msg);

}

public void warn(String msg) {

System.out.println(clazz.getName() + "[" + new Date().toLocaleString()

+ "][warn]:" + msg);

}

public void log(String msg) {

System.out.println(clazz.getName() + "[" + new Date().toLocaleString()

+ "][log]:" + msg);

}

public static void main(String args[]) {

Logger s = Logger.getLogger(String.class);

s.info("普通消息");

}

}


当前文章:java单子模式代码 java设计模式之单例模式
网站路径:http://scyanting.com/article/doioggo.html