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构造函数启动线程.
我想保持这个线程创建运行,直到我打断它.
您可以做一些比永远挂起初始线程更好的事情:
使用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?
| 归档时间: |
|
| 查看次数: |
5472 次 |
| 最近记录: |