java 开发 —— 问题列表

唯有记录才能弥补中年人的记忆能力

碎碎念:

  • 本系列仅记录java开发中碰到的问题,仅供参考,实际用途并不大,仅供本人使用,莫对号入座

1. javax.jms.IllegalStateException: Illegal use of receive() from multiple threads

1. 1 问题代码示例:

public class JMSMessageListener implements MessageListener {
    public void work() {
        MessageConsumer consumer = session.createConsumer(destination);
        // 此处添加消息监听
        consumer.setMessageListener(this);
        Message msg = null;
        while (true) {
            // 此处接收消息
            msg = consumer.receive();
        }
    }

    public void onMessage(Message message) {
    // 此处消息监听处理
    }
}

1. 2 问题分析:由代码可知,既然已经添加了消息监听,那就没必要在接收阻塞式处理了,这是本人着急情况下产生的,但异常问题指向的是不能再多线程下使用receive方法,按问题代码写法再MessageListener实际上也创建自身的线程去实现receive的阻塞式获取,要确保消费端代理获取的唯一性,故有此判断抛出的错误,解决方法当然是2选一,还是推荐用MessageListener处理

你可能感兴趣的:(java 开发 —— 问题列表)