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

ServerEndpoint的每个方法是否由不同的线程执行?

曹浩淼
2023-03-14
  • 客户端创建新的websocket从池中取出一个线程来创建ServerEndpoint的新实例并执行@onOpen方法。在该线程放回池中之后。
  • 客户端通过websocket向服务器发送消息。从池中取出线程以执行@onMessage方法。在该线程放回池中之后。
  • 客户端关闭websocket-从池中取出线程以执行@onClose方法。在该线程放回池中之后。

这都意味着ServerEndpoint的每个方法都可以由不同的线程执行。我的理解对吗?

共有1个答案

富凯旋
2023-03-14

是的。

只要在@onopen期间关联的WebSocket会话作为session参数可用,ServerEndpoint实例就会存在。在WebSocket会话期间,可能会激发许多HTTP和WebSocket请求。每个这样的请求都作为一个单独的线程来计算。

换句话说,如果ServerEndpoint类出于某种原因需要在多个方法中处理实例变量,则必须以线程安全的方式实现。根据具体的功能需求,您最好使用session#getuserproperties()来携带与WS会话相关联的状态(将其视为会话属性)。

 类似资料:
  • 问题内容: 我有4种方法(,,和一类)。方法,并有方法。另外,我有4个线程,,和分别。 如果访问方法(同步方法),线程访问方法(同步方法)是否可以同时进行?如果不是,则t2的状态如何? 问题答案: 如果t1访问m1方法(同步方法),t2线程可以同时访问m2方法(同步方法)吗? 该关键字适用于 目标水平 ,且只有一个线程可持有对象的锁。因此,只要您在谈论同一个对象,那么 否 ,它将等待释放进入时获得

  • 问题内容: 我有几种用注释的方法。 在应用程序上下文中,我具有以下注释驱动的设置: 问题是,有时某些方法的执行会延迟几秒钟甚至几分钟。 我假设即使某个方法需要一段时间才能完成执行,其他方法仍会执行。所以我不明白延迟。 有没有办法减少甚至消除延迟? 问题答案: 为了完整起见,以下代码显示了使用java config配置调度程序的最简单方法: 当需要更多控制时,可以实现一个类。

  • 问题内容: 我在Linux中有一个多线程程序。我想在某些内存区域中查看它们是否已在特定时间段内写入。为此,我仅授予对这些内存页面的读取访问权限,并为SIGSEGV安装信号处理程序。现在我的问题是,每个线程都会自己调用信号处理程序。假设线程1写入某个禁止的内存区域,它是执行信号处理程序的区域吗? 问题答案: 首先 信号处理是全过程的;进程中的所有线程对于每个信号共享相同的配置。如果一个线程使用sig