我在尝试集成实现倒计时的OSGi捆绑包时遇到问题,以便在特定的时间间隔内发送消息。这是由可运行的类或线程构成的。
这个想法是下一个;我有捆绑 Sender
,捆绑 Receiver
并捆绑 Countdown
。
发件人捆绑包在一段时间后发送一条消息,f.e:5秒。
发件人 - >创建讯息
倒计时 - >数到5秒。
接收方 - >在5秒后收到消息。
这只是我的应用程序的“metaphore”,但是,我相信你有了这个想法。
我遇到的问题是下一个问题:当捆绑 Countdown
正在运行5秒倒计时时,捆绑 Sender
停止工作(这是好的,这里没问题),但捆绑 Receiver
也停止工作。我的想法是在一个单独的捆绑中实现倒计时,以避免其他捆绑停止工作,但我想我错了。
所以,我的问题是...... 如何实现倒数,不会不必要地停止OSGi应用程序的所有捆绑?
提前致谢。
一些代码:
Countdown
public void countDown()
{
int i = delay;
while (i>0){
try {
i--;
Thread.sleep(1000); // 1000ms = 1 s
}
catch (InterruptedException e) {
//countdown failure? --> nah
}
}
}
Sender
Thread t = new Thread(new Countdown(5));
t.start();
while (t.isAlive());
System.out.println("Sending the message");
答案 0 :(得分:2)
OSGi包既不是单独的进程,也不是单独的线程。捆绑包不会“运行” - 代码会在任何点上找到零个或多个线程的执行路径。
因此,您的问题根本不是关于OSGi,而是关于Java中的一般多线程。如果你想在等待答案时阻塞一个线程,并希望其他代码继续运行,那么你必须确保其他代码有自己的线程来运行。