单例的线程安全疑问?

逍遥剑2018 2013-07-27 11:37:59
请教一下:
下面的单例会有线程安全问题吗?
即如果这句话private static Singleton instance=new Singleton();不加同步,会有线程安全问题吗?

public class Singleton {

private Singleton(){}
private static Singleton instance=new Singleton();
public static Singleton getInstance(){

return instance;
}
public void test(){
System.out.println("this is a testing...");
}
}

public class Main {

public static void main(String[] args) {

System.out.println("test...");
for(int i=0;i<10;i++){
new Thread(new Runnable(){

@Override
public void run()
//这里有没有可能会出现并发导致上面的单例会出现多次的new Singleton()?
Singleton singleton=Singleton.getInstance();
singleton.test();

}}).start();
}

}

}

谢谢
...全文
167 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
JPF1024 2013-07-31
  • 打赏
  • 举报
回复
不会出现多次,不过还是小心用线程。。。。。。
lcf 2013-07-31
  • 打赏
  • 举报
回复
static 的东西是ClassLoader加载类的时候执行的,而ClassLoader加载类的过程是全程synchronized
lkq_david 2013-07-31
  • 打赏
  • 举报
回复
个人觉得有可能的,虽然private static Singleton instance=new Singleton();是static的,但是new了呀。如果两个线程同时执行到了这句话呢?给你一篇文章看看 http://blog.csdn.net/liushuijinger/article/details/9069801
sca4441479 2013-07-31
  • 打赏
  • 举报
回复
声明静态变量,只会初始化一次,哪来线程安全问题
褚金辉 2013-07-28
  • 打赏
  • 举报
回复
不会出现安全问题.
hquCTH 2013-07-28
  • 打赏
  • 举报
回复
你这个例子是不会的,采用单例保证类不被多次实例化,而你没创建一个线程仅仅是调用一个输出的方法,没有涉及到共享数据什么的,所以一般不会出现安全问题。
oh_Maxy 2013-07-28
  • 打赏
  • 举报
回复
不会多次初始化,LZ可以在默认构造方法里,写一句打印的句子,就可以看出来了。 要考虑的是其他普通成员方法可能并发执行。
rumlee 2013-07-28
  • 打赏
  • 举报
回复
不会出现多个实例
S117 2013-07-27
  • 打赏
  • 举报
回复
这种叫做饿汉模式 利用了java static的特性 就是java中static变量只会初始化一次,就是在类装载的时候

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧