首页 > 代码库 > 多线程以及同步问题
多线程以及同步问题
1.在单例设计模式中,会出现多线程的同步问题。主要表现在,当使用的是懒汉式单例设计模式来创建对象的时候,若有多个进程同时在执行,则有可能会创建了多个对象,但这个不是单例设计模式应该出现的问题。所以需要使用锁机制来解决。需要注意的是,饿汉式不会出现这个问题。具体代码如下。
1 class Singleton_lazy{ 2 //懒汉式 3 private Singleton_lazy(){} 4 5 private static Singleton_lazy INSTANCE = null; 6 7 public static Singleton_lazy getInstance(){ 8 if(INSTANCE == null){ //在同步代码块的上面加一个判断,若对象不为空,则肯定不需要创建对象了。也就不需要再去通过同步代码块了 9 synchronized (Singleton_lazy.class) { //因为是静态的方法,没有办法使用this去作为锁的对象,因此可以使用类名.class 10 if (INSTANCE == null) 11 INSTANCE = new Singleton_lazy(); 12 } 13 } 14 return INSTANCE; 15 } 16 }
姑且也许可以这么认为,在有判断语句存在的地方,由于多线程是由cpu来控制执行的,时间片的切换可能导致一种不安全的情况,例如
1 boolean flag = false; 2 if(flag == false){ 3 ....execute; 4 flag = true; 5 }
在这种情况下,第一个线程满足条件进入之后,还没来得及将flag改为true,此时第二条进程已经通过了判断,进入了函数体,导致不安全问题的产生。
多线程以及同步问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。