春天的单身人士对ejb vs java

时间:2017-05-25 23:49:38

标签: java spring java-ee concurrency ejb

Spring有单身和原型。 EJB有单例和无状态。

我一直在研究EJB,因为我认为EJB中的单例意味着多个用户无法同时访问该类。因此,用户将一直等到资源空闲。因此总是使用无状态。

来到Spring,没有相当于EJB无状态的东西。默认情况下,一切都是单身,如果用作原型则是新的。那么当多个用户试图同时访问同一个单例bean时会发生什么。他们一直在等吗?

也许我的Java基础知识在这里并不清楚。 当多个用户尝试访问同一个java单例类或同一个java单例类的相同方法时会发生什么。它在内部如何运作?通过这里的java singleton,我的意思是一个带有私有构造函数的类。

在EJB中使用Singleton和Stateless吗?

3 个答案:

答案 0 :(得分:2)

  

我一直在研究EJB,因为我认为EJB中的单例意味着多个用户无法同时访问该类。因此,用户将一直等到资源空闲。因此总是使用无状态。

多个线程可以同时使用相同的单例bean。 https://docs.oracle.com/cd/E19798-01/821-1841/gipsz/index.html

  

来到Spring,没有相当于EJB无状态的东西。

也许没有注释,但行为是一样的。

  

也许我的Java基础知识在这里并不清楚。当多个用户尝试访问同一个java单例类或同一个java单例类的相同方法时会发生什么。它在内部如何运作?通过这里的java singleton,我的意思是一个带有私有构造函数的类。

正如其他用户所说,拥有私人构造函数的类不一定是单身。 我首选的单身人士是:

    private static final UserType INSTANCE = new UserType();

    private UserType(){
    }

    public static UserType get(){
        return INSTANCE;
    }

多个线程可以使用java单例,实例化后没有同步。

  

在EJB中使用Singleton和Stateless吗?

绝对不是。无状态bean有一个实例池。 Singleton bean只有一个,作为java单例对象。但是关于并发性,是的,两者都不会阻止线程。

答案 1 :(得分:1)

我假设你在谈论一个Web应用程序。当在servlet容器中运行的Web应用程序时,每个用户请求都会创建一个具有自己的Stack的单独线程。因此,单个类的方法可以由多个并发线程执行。这是Java虚拟机的美妙之处。这允许并发用户访问相同的代码而不会相互阻塞。

答案 2 :(得分:1)

  

当多个用户尝试访问相同内容时会发生什么   单独的豆子。他们一直在等吗?

不要将synchronized与单身人士混为一谈。当然,多个线程可以同时访问Spring Bean。

  

当多个用户尝试访问同一个java时会发生什么   单例类或相同java单例类的相同方法。

没什么,但如果你的Singleton类有实例或类变量,那么线程将同时访问它们。