multithreading - IBM XMS:会话范围多线程安全吗?
问题描述
运行多线程时会话范围是否安全?我有一个单例服务(多线程),它的方法如下所示:
public void GetMessage()
{
{
using var session = _connection.CreateSession(true, AcknowledgeMode.SessionTransacted);
using var destination = session.CreateQueue(_queueName);
using var consumer = session.CreateConsumer(destination);
var msg = consumer.ReceiveNoWait();
// Handles message here
msg.Commit();
}
}
在我看来,每次调用该方法都会创建自己的会话范围,该会话范围彼此并行运行。
另一方面,如果两个线程彼此靠近运行,那么当创建一个会话时,另一个会话将在该会话内创建。
这种方法多线程“安全”吗?或者我需要在这种情况下使用锁吗?
private readonly object _lock = new();
public void GetMessage()
{
lock(_lock)
{
using var session = _connection.CreateSession(true, AcknowledgeMode.SessionTransacted);
using var destination = session.CreateQueue(_queueName);
using var consumer = session.CreateConsumer(destination);
var msg = consumer.ReceiveNoWait();
// Handles message here
msg.Commit();
}
}
解决方案
推荐阅读
- c# - CTRL+R CTRL+T 不适用于 VisualStuidio2017
- java - Java Graphics2D:如何将透视变换应用于 Graphics2D 对象?
- android - 导航抽屉宽度问题
- apache-kafka - SalesForce 的 Kafka 提供商 URL
- intellij-idea - Visual Studio 代码中用于完成 IntelliJ 中的语句的键盘快捷键是什么?
- java - 我可以将活动转换为浮动窗口吗?
- powerbi - 嵌入在 Power Bi Desktop 中的 PowerApp 与本地 SQL Server 通信,无需本地部署
- postgresql - 如何在 Windows 操作系统中使用 Postgres 排序规则?
- aem - 访问在页面级 JSP 中设置的变量,在 AEM HTL 中组件的 data-sly-use javascript 中设置?
- python - 如何将 x 轴按固定数量按比例缩小?