本帖最后由 HM赵磊 于 2013-3-19 00:08 编辑
这个问题分为两点解释:
一、由于JAVA对多线程的支持,当多个线程对共享数据进行操作时,如果不加以限制将会出现数据错乱,这时synchronized就派上用场了,她给多个线程要操作的共享数据加了一把锁,任何线程对共享数据操作时,会给数据加一把锁,如果锁没解开,其他的线程共享数据无法操作。那么,任何线程想要对共享数据操作的时候会先判断一下锁是否存在,这样就保证了数据的安全性,一致性。
二、您给出的例子是单例设计模式中的懒汉式。如果不使用synchronized修饰的话,假设有两个线程想要获取单例对象时,同时调用了 getInstance()方法,并且这个判断if (instance==null)是正确的,就会执行instance=new Singleton(),那么就会创建了两个Singleton对象,那么单例如何保证呢?如果使用了Synchronized关键字修饰,相当于加了一把锁,调用getInstance()方法之前,会先判断有没有其他线程对其进行操作,这样就避免了并发操作,保证了单例的唯一性,正确性。
|