问题在代码 写清楚了,,大神给看一下解释一下吧
Single.java
- package com.xiaobei.test;
- /*
- * 单例 :懒汉模式
- * 高效的懒汉模式 实例
- * 疑问:
- * 为什么 再 synchronous之后 那个if(s==null) 不能去掉
- * 老师给我们解释说,在sychronous(Single.class) 会出现卡住现象
- * 从而会又new Single.....但是我理解的
- * sychronous()的功能不就是,防止 卡住一类的现象,实现 同步吗???
- * 那要是这里能卡住,,,那其他同步应用 synchronous的 时候 ,是不是也会卡住,是不是也需要在其后面加个判断哪????/
- * 希望 大神 给解释一下/////////////
- */
- public class Single {
- private Single() {
- }
- Single s = null;
- public Single getInstance() {
- if (s == null) {
- synchronized (Single.class) {//老师给我们解释说 这里或在 取 Single.class的时候会卡住,
- if (s == null) {//大神(最好是老师哈)给解释一下为什么这个if不能去掉吗
- s = new Single();
- }
- }
- }
- return s;
- }
- }
复制代码
SingleDemo.java
- package com.xiaobei.test;
- /*
- * 测试单例模式,懒汉式
- */
- class SingleRunnable implements Runnable{
- @Override
-
- public void run() {
- // TODO Auto-generated method stub
- for (int i = 0; i < 20; i++) {
- Single s=Single.getInstance();
- System.out.println(s);
- }
- }
-
- }
- public class SingleDemo {
- public static void main(String[] args) {
- SingleRunnable s=new SingleRunnable();
- Thread t0=new Thread(s);
- Thread t1=new Thread(s);
-
- t0.start();
- t1.start();
-
- }
- }
复制代码 |
|