【发布时间】:2016-03-04 18:58:47
【问题描述】:
我有一个类是传入消息的侦听器,并且应该永远活着(以便它可以侦听传入消息),直到我明确断开它的连接。我已将线程声明为 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);
}
}
});
}
}
调用类只是创建它的对象,线程由 Listeners 构造函数启动。
我想保持这个线程创建运行直到我中断它。
【问题讨论】:
-
你能发布你的代码吗?
-
我已经发布了这个帖子,先生,请告诉我你们通常会做什么来保持听众的运行?
-
我认为监听器应该永远保持注册状态,除非
ChatManager出于某种原因删除了监听器。您不需要在后台线程中进行注册,也没有理由让该线程继续运行。正如彼得指出的那样,您的侦听器代码将从不同的线程中调用。 -
我不知道你想做什么,但是这里的线程是没有用的,因为其他人说你可以摆脱它并在别处寻找你的问题。
标签: java multithreading