当前位置: 首页 > 知识库问答 >
问题:

在EJB Singleton中的Thread.sleep(),具有并发管理类型。豆子

井疏珂
2023-03-14

线EJB bean中的sleep()被视为反模式线程。EJB中的sleep(),因为“您不应该创建或管理线程”

但是从EJB 3.1中,我们可以为其定义ConouscyManagementType。豆子。根据EJB规范:

通过Bean托管并发划分,容器允许对单例bean实例进行完全并发访问。bean开发人员有责任根据需要保护其状态,防止并发访问导致的同步错误。bean开发人员可以为此使用Java语言级别的同步原语,如同步和易失性。

所以,如果我想实现方法等待一分钟,我可以在这样的Singleton中使用Thread.sleep(),或者可以使用超时的等待(),因为它是同步原语,或者它仍然将被视为反模式?

共有2个答案

岳俊雅
2023-03-14

EJB规范引用了:

企业bean不能试图管理线程。企业bean不能尝试启动、停止、挂起或恢复线程,也不能更改线程的优先级或名称。企业bean不能试图管理线程组。

因此规范明确地说不要调用start()、stop()、suspend()和resume()方法。它没有说任何关于sleep()或wait()的内容,我想说,认为这些方法也被禁止是一种过度的解释。

因此,睡眠()应该可以毫无问题地工作,并且使用bean管理的并发甚至可以不阻塞其他线程。然而,我想知道你为什么需要睡觉,但这是一个不同的问题。

对于wait(),您需要一个带有监视器的同步块,根据您选择的对象,您可能会阻止其他线程。可能您希望拥有互斥代码或不想要互斥代码,这取决于您的用例。

使用容器管理的concurreny,sleep()和wait()都会在睡眠时间内阻止其他线程。

封锐藻
2023-03-14

EJB 3.1规范说:

企业bean不能试图管理线程。企业bean不能尝试启动、停止、挂起或恢复线程,也不能更改线程的优先级或名称。企业bean不能试图管理线程组。

用线。sleep()即使bean使用ConcurrencyManagementType进行注释,您仍然会违反上述规则。豆

通过注入托管执行器服务,可以在托管线程中使用Thread.sleep()。像这样的东西:

    @Stateless
    public class ManagedThread {

    @Resource
    ManagedExecutorService executor;

        public void executeManagedThread(){
            Runnable task = () -> {
                try {
                    // some long running task
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            };
            executor.execute(task);
        }

    }

并发管理类型。BEAN对于管理单例BEAN中的并发访问非常有用。例如,并发访问在读写某些资源方面有所不同。更多信息可以在这里找到http://docs.oracle.com/javaee/6/tutorial/doc/gipvi.html.

 类似资料:
  • 使用map()和一个基本的线程池 # futures_thread_pool_map.py from concurrent import futures import threading import time def task(n): print('{}: sleeping {}'.format( threading.current_thread().name,

  • 问题内容: 是否可以在没有警告警告的情况下模拟(带有模拟)签名方法?我试过了: 但无论我如何声明,我总是会遇到编译错误。例如当我这样宣布 我收到标准的通用/ mockito编译错误 问题答案: 使用doReturn-when备用存根语法。 被测系统: 和测试用例: 无需错误或警告抑制

  • 我试图为我的项目管理软件画一个类图,描述如下。它包含以下类别: 项目 - 软件 - 管理项目的人/她 - 从事项目工作的人员 以及以下关系/关联: > < li> 一个项目经理可能要管理多个项目,而一个项目只能由一个项目经理管理 项目经理可以将员工分配给他/她管理的项目 对于上面的关联,我创建了这个类图: < li >如何对第一个关联(在< code>ProjectManager和< code>P

  • 一、总体介绍   发票管理分为:开发票、发票记录、发票抬头管理、收货信息管理四个模块。 二、操作手册  1、开发票模块    1)企业支付发票(通过企业充值计算的可开票金额): 注意: a.开发票优先发票类型为“电子发票”,只需要维护接收电子发票邮箱即可; b.根据税局规定,网约车服务发票内容只能开具:“运输服务”客运服务费; c.开发票模块要先创建发票抬头,当发票抬头与注册公司名称不一致,要上传

  • 本文向大家介绍Android开发实现的内存管理工具类,包括了Android开发实现的内存管理工具类的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android开发实现的内存管理工具类。分享给大家供大家参考,具体如下: 更多关于Android相关内容感兴趣的读者可查看本站专题:《Android开发之内存与缓存技巧总结》、《Android资源操作技巧汇总》、《Android视图View技巧总

  • 问题内容: 所以我有一张地图: 我会像这样添加元素: 我有如下通用方法: 现在,这段代码可以很好地工作,并且没有编译器问题: 但是,当我尝试这样做时: 编译器向我显示以下警告:类型安全:通用方法verifyType(String,Class)的未经检查的调用verifyType(String,Class) 这让我感到困惑…请帮助… 问题答案: 更改: 至 通过仅将类型声明为“ Class”,就失去