在EJB程序中使用并发集合

时间:2011-01-20 08:45:53

标签: java multithreading concurrency thread-safety ejb

我可以在EJB程序中使用并发集合(java.util.concurrent)吗?因为托管环境中存在许多约束。也许EJB容器管理所有线程控制,因此java.util.concurrent将违反EJB环境。

我理解正确吗?如果是这样,那么与sleep()synchronized等线程相关的操作也不能在EJB程序中使用。

例如,BlockingQueue导致线程在EJB会话bean中挂起。

1 个答案:

答案 0 :(得分:4)

这取决于具体情况,但通常没有什么可以在EJB程序中使用并发集合的原因。

EJB容器管理(以及其他)请求线程,也就是说,它负责将每个传入请求分配给一个单独的线程(取自线程池)。但是,并发集合不会以任何方式干扰它:它们不会在内部创建或操作线程,只需确保存储在其中的数据可以安全地由多个线程并行访问和修改。

请注意,只有在从多个线程访问/修改其内容时才需要使用并发集合。如果您的数据仅限于单个线程(请求),那么您很可能不需要担心线程安全。

关于sleep()synchronized您应该了解这些抽象级别与并发集合不同(较低)。使用并发集合时,不需要直接使用任何这些。 (有些 - 但不是全部 - 集合在其实现中内部使用了synchronized块。关于sleep(),我的赌注是它可能不会在任何并发集合中使用。)

如果没有更多关于你想要达到的具体细节,很难说清楚。