如何让听众线程活跃起来

Ali*_*ore 9 java multithreading

我有一个类,它是传入消息的监听器,应该永远存活(以便它可以监听传入的消息),直到我明确断开它的连接.我已将该线程声明为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);
            }
        }
    });
    }
}
Run Code Online (Sandbox Code Playgroud)

调用类只是创建它的对象,并且由Listeners构造函数启动线程.

我想保持这个线程创建运行,直到我打断它.

SSP*_*SSP 3

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

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

synchronized(this) {
    while (true) {
        this.wait();
    }
}
Run Code Online (Sandbox Code Playgroud)

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

复制自How do youhang a thread in Java in one line?