单例模式与多线程的关系
来源:互联网 发布:php伪造referer跳转 编辑:程序博客网 时间:2024/06/10 04:21
package test;
public class Tiger6 {
static class Inner {
private static Inner instance = null;
private Inner() { //每调用一次构造函数,打印一条消息。
System.out.println("create a Inner object!");
}
public static Inner getInstance() {
if (instance == null) {
instance = new Inner();
}
return instance;
}
}
public static void main(String[] args) {
Thread[] ts = new Thread[100];
for (int i = 0; i < ts.length; i++) {
ts[i] = new Thread(
new Runnable() {
public void run() {
Inner.getInstance();
}
}
);
}
for (Thread t : ts) {
t.start();
}
}
}
结果:
create a Inner object!
create a Inner object!
create a Inner object!
显然,结果是违反单例模式要求的。
现在在Inner.getInstance()方法上加上synchronized。
结果:
create a Inner object!
当然还有另外一种办法:
public static Inner getInstance() {
synchronized(Inner.class) {
if (instance == null) {
instance = new Inner();
}
} return instance; 分析:通过上面这种办法,可以控制在同一时刻上,只允许有一个线程访问到变量instance。
}
return instance;
}
分析:通过上面这种办法,可以控制在同一时刻上,只允许有一个线程访问到变量instance。
当然,只有对懒汉式单例模式才有这个问题。对于饿汉式单例模式,Inner对象在类装载时就被创建。
- 单例模式与多线程的关系
- 多线程与单例对象之间的关系---笔记
- 单例模式与多线程
- 单例模式与多线程
- 单例模式与多线程
- 单例模式与多线程
- 单例模式与多线程
- 单例模式与多线程
- 单例模式与多线程
- 单例模式与多线程
- 单例模式与多线程
- 单例模式与多线程
- 单例模式与多线程
- 多线程的单例模式
- 多线程的单例模式
- 探讨单例模式与多线程单例模式
- 【转】JAVA 单例模式与多线程
- JAVA 单例模式与多线程
- Lock与Unlock
- [转载]一个软件,从零到发布(.tar.gz)
- 理解synchronized(Object)锁
- 青椒炒肉
- 利用RSS进行项目沟通
- 单例模式与多线程的关系
- 带创建参数的匿名内部类
- 字符集系列一之痛苦的resin
- 自定义线性表的简单例子
- Eclipse 3 + Lomboz 3 + Tomcat 5 设置(转载)
- 界面设计的基本技巧
- 链表简单例子
- IBM WebSphere 网站专家 安装指南
- java.text和java.util的综合运用