在OSGi中实现wait方法而不停止其他bundle的线程

时间:2014-02-18 11:47:46

标签: java multithreading osgi osgi-bundle

我在尝试集成实现倒计时的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");

1 个答案:

答案 0 :(得分:2)

OSGi包既不是单独的进程,也不是单独的线程。捆绑包不会“运行” - 代码会在任何点上找到零个或多个线程的执行路径。

因此,您的问题根本不是关于OSGi,而是关于Java中的一般多线程。如果你想在等待答案时阻塞一个线程,并希望其他代码继续运行,那么你必须确保其他代码有自己的线程来运行。