论坛首页 Java企业应用论坛

关于线程和实例的疑问

浏览 10040 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2004-12-09  
public class A implements Serializable {

private final static ThreadLocal singlePerThread=new ThreadLocal();;

public static A getInstance(); {
        A fact = (A); singlePerThread.get();;
        if(face == null); {
           face = createobj();; //创建第一个实例
       singlePerThread.set(fact);;
        }
         return fact;
}

}


请问,在上面这段代码中,getInstance方法是所有线程共享一个实例,还是说为每一个线程赋予了一个实例?
   发表时间:2004-12-09  
如果createObj()是直接new出一个对象,那么是每个线程一个实例。
0 请登录后投票
   发表时间:2004-12-09  
是的,是执行了一次newInstance。

那么也就是说,每一个访问这个类的线程都有一个唯一的实例了。

请问,这样做,还算不算是单例模式? 单例模式指的是不是无论有多少个其他线程来访问它,也只共享一个实例?
0 请登录后投票
   发表时间:2004-12-09  
还请问一点,Servlet所实现的 “单实例,多线程” 和上面这段代码所表述的含义一致么?
0 请登录后投票
   发表时间:2004-12-09  
这个是Threadlocal模式,和singleton不一样,singleton是说在整个应用程序中保证只有一个实例,而Threadlocal是指每线程有唯一实例。Servlet的 “单实例,多线程”是指多个线程共享一个实例,因此会有同步的问题
0 请登录后投票
   发表时间:2004-12-09  
谢谢你的回复,那一般说的静态工厂模式,是单例模式,还是ThreadLocal模式还是Servlet模式,抑或是其他模式?

单例模式是整个应用共享一个实例,是不是也会有Servlet那种线程同步并发的问题?
0 请登录后投票
   发表时间:2004-12-10  
静态工厂模式就是把工厂作为一个单例使用的,是单例模式
0 请登录后投票
   发表时间:2004-12-10  
flyromza 写道
谢谢你的回复,那一般说的静态工厂模式,是单例模式,还是ThreadLocal模式还是Servlet模式,抑或是其他模式?

单例模式是整个应用共享一个实例,是不是也会有Servlet那种线程同步并发的问题?


单例模式通常是不会出现同步问题的,只要你保证getInstance方法是同步的就没问题,不过这样性能上会有损失
0 请登录后投票
   发表时间:2004-12-10  
yhc0125 写道
flyromza 写道
谢谢你的回复,那一般说的静态工厂模式,是单例模式,还是ThreadLocal模式还是Servlet模式,抑或是其他模式?

单例模式是整个应用共享一个实例,是不是也会有Servlet那种线程同步并发的问题?


单例模式通常是不会出现同步问题的,只要你保证getInstance方法是同步的就没问题,不过这样性能上会有损失


“单例模式通常是不会出现同步问题的” 这句话怎么讲? 如果singleton返回的“缓存”对象是具有状态的。多处同时引用这同一个对象,那怎么会不出现“同步”问题呢?
0 请登录后投票
   发表时间:2004-12-10  
yhc0125 写道
静态工厂模式就是把工厂作为一个单例使用的,是单例模式


这句话也有问题,静态工厂模式中,这里的工厂是一个“singleton”,但是工厂所返回的对象未必是singleton。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics