首页 > 解决方案 > 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();
  }
}

标签: multithreadingwebspherexms

解决方案


推荐阅读