Java 多线程安全 单例
2012-10-26 17:16
162 查看
//非线程安全这种处理方式在单线程的模式下可以很好的运行;但是在多线程模式下,可能产生问题。如果第一个线程发现成员变量为null,准备创建对象;这是第二个线程同时也发现成员变量为null,也会创建新对象。这就会造成在一个JVM中有多个单例类型的实例。如果这个单例类型的成员变量在运行过程中变化,会造成多个单例类型实例的不一致,产生一些很奇怪的现象。例如,某服务进程通过检查单例对象的某个属性来停止多个线程服务,如果存在多个单例对象的实例,就会造成部分线程服务停止,部分线程服务不能停止的情况
//线程安全这种处理方式虽然引入了同步代码,但是因为这段同步代码只会在最开始的时候执行一次或多次,所以对整个系统的性能不会有影响。
public class TestService{ private static TestService instance = null; private TestService() { } public static TestService getInstance() {if (instance == null) {instance=new TestService();}return instance;}} |
public class TestService{ private static TestService instance = null; private TestService() { } private static synchronized void syncInit() {if (instance == null) {instance = new TestService();}} public static TestService getInstance() {if (instance == null) {syncInit();}return instance;}} |
相关文章推荐
- Java多线程总结之线程安全队列Queue
- (十)Core Java 多线程(安全) (98)
- 黑马程序员--JAVA基础复习之多线程(二)线程安全与解决方法
- Java - HashMap 多线程安全解析
- Java多线程总结之线程安全队列Queue
- java基础——多线程——线程安全不安全
- 黑马程序员——java中关于同步函数(或同步代码块)解决多线程安全问题的加锁
- [原]Java多线程编程学习笔记之七:多线程环境中安全使用集合API(含代码)
- Java多线程总结之线程安全队列Queue
- 多线程安全的Singleton单件模式在C++,java与C#下的实现
- java 多线程学习之多生产者多消费者产生的线程安全问题分析与解决:Lock和Condition
- 黑马程序员-JAVA基础-多线程的安全、同步与死锁
- [Java多线程 四]---线程安全与锁优化
- Java 多线程安全之 Atomic
- 转:【Java并发编程】之八:多线程环境中安全使用集合API(含代码)
- [java多线程]如何安全的退出线程
- java多线程及安全问题
- 【Java并发编程】之八:多线程环境中安全使用集合API(含代码)
- 【Java并发编程】之八:多线程环境中安全使用集合API(含代码)(r)
- java多线程学习一线程安全之内存、synchronized、volatile