A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

最近在学习线程,然后写了一个多线程的单例设计模式。
代码如下:
  1. /*       
  2. 解决一个类在内存中只存在一个对象的单例设计模式(懒汉式)
  3. */
  4. class Single implements Runnable
  5. {       
  6.         String name;
  7.         private static Single s=null;
  8.         private Single(){}
  9.         public void run()
  10.         {
  11.                  getInstance();
  12.         }
  13.         public static Single getInstance()
  14.         {
  15.                 if(s==null)//双重锁判断的形式是为了解决代码效率性。
  16.                 {
  17.                         synchronized(Single.class)//解决多线程访问的安全性,故加同步代码块,使用的锁为该类所指的字节码文件对象(Single.class)。
  18.                         {
  19.                                 if(s==null)
  20.                                 {
  21.                                         try{Thread.sleep(10);}catch(Exception e){}
  22.                                         s=new Single();
  23.                                 }
  24.                         }
  25.                 }
  26.                 return s;       
  27.         }
  28. }

  29. class Demo2
  30. {
  31.         public static void main(String[] args)
  32.         {               
  33.                 Thread t1=new Thread();
  34.                 Thread t2=new Thread();
  35.                 t1.start();
  36.                 t2.start();
  37.                 //接下来如何获取到run()函数中 getInstance()返回的对象呢?
  38.                 //。。。
  39.         }
  40. }
复制代码
最后不知道该如何获取到run()函数中 getInstance()返回的对象了,求各位大神帮忙解决~


4 个回复

倒序浏览
不用在run方法中调用getInstance方法吧,直接
Thread t1=new Thread(Single.getInstance());
Thread t2=new Thread(Single.getInstance());
t1.start();
t2.start();
返回的是同一个Single对象,两个Thread线程,start后,启动了线程,JVM会自动的调用run方法,并执行其中的代码,执行的是同一个run方法。
回复 使用道具 举报
Single.getInstance()就可以获取到返回的对象了。因为getInstance()是静态的,直接可以通过类名访问。
不用通过run方法来返回,用 run的话就好比进屋需要门的钥匙,但是钥匙又在屋里一样。。
回复 使用道具 举报
快乐ABC 发表于 2015-4-1 11:44
不用在run方法中调用getInstance方法吧,直接
Thread t1=new Thread(Single.getInstance());
Thread t2=ne ...

我是想一开始就直接让t1,t2两个线程去分别去访问getInstance()函数,如果Thread t1=new Thread(Single.getInstance());这样写的话,那就是主函数先访问getInstance()函数,而不是一开始就是由两个线程去访问getInstance()函数了吧!
回复 使用道具 举报
关山明月 发表于 2015-4-1 13:46
Single.getInstance()就可以获取到返回的对象了。因为getInstance()是静态的,直接可以通过类名访问。
不用 ...

我是想一开始就直接让t1,t2两个线程去分别去访问getInstance()函数,如果Thread t1=new Thread(Single.getInstance());这样写的话,那就是主函数先访问getInstance()函数,而不是一开始就是由两个线程去访问getInstance()函数了吧!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马