您的位置:首页 > 编程语言 > Java开发

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;}}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: