如何保持侦听器线程处于活动状态



我有一个类,它是传入消息的侦听器,应该永远处于活动状态(以便它可以侦听传入消息),直到我显式断开它的连接。我已经将线程声明为 setDaemon(false),但它以调用方法终止而终止。

告诉我如何保持该线程的活动,并请阐明如何实现Spring TaskExecutor以实现相同的目标。

提前谢谢。它是一个侦听器,当有人发送消息时会收到通知......那么我如何保持它运行呢?

侦听器类

public class MyListnerImpl implements Listener {
    private final connectionImpl con;   
    public MyListnerImpl(ConnectionImpl con) {
    if (con.isAuthenticated() && con.isConnected()) {
        if (logger.isInfoEnabled()) {
            logger.info("Initializing XmppListner:");
        }
        this.itsCon = con;
        Thread t1 = new Thread(this);
        t1.setDaemon(false);
        t1.start();
    }
    }
    public final void listnerInterfaceMethod(final Chat chat, final Message message) {
        System.out.println("Message" + message);
    }
    public final void run() {
    itsCon.getChatManager().addChatListener(new ChatManagerListener() {
        public void chatCreated(final Chat chat, final boolean createdLocally) {
            if (!createdLocally) {
                chat.addMessageListener(itsFbml);
            }
        }
    });
    }
}

调用类只是创建其对象,线程由侦听器构造函数启动。

我想让这个创建的线程保持运行,直到我中断它。

您可以做一些比永远挂起初始线程更好的事情:

使用otherThread.join() .这将导致您正在运行的当前线程休眠,直到另一个线程完成执行。正如@nanda建议的那样,使用 ExcecutorService.shutdown() 等待线程池完成。使用otherThread.setDaemon(false),只需让初始线程退出即可。这会将新线程设置为用户线程。Java 不会关闭,直到唯一运行的线程是守护进程线程。

synchronized(this) {
    while (true) {
        this.wait();
    }
}

这将使当前线程在当前类的监视器上等待,直到有人调用notify(),或者永远。

复制自 如何在一行中挂起 Java 中的线程?

线程说活动,直到run()返回(或抛出错误/异常) 如果要使其保持活动状态,请使用循环,不要返回并捕获任何错误/异常。

这就是

我当时解决问题的方式,所以这种情况不是多线程的,只有一个线程需要永远运行,所以插入

public final void run() {
while(true)
{
//Run Method Logic...
}
}

并从春豆中实例化了它。我也在为这个单线程场景寻找更多花哨的东西,比如 awaitTermination();或类似的东西。

最新更新