2014-02-18 21 views
0

我在嘗試集成實現倒計時的OSGi包以便在特定時間間隔內發送消息時出現問題。這是由可運行的類或線程完成的。在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

我們能否看到一些代碼我們可以診斷問題? – GreySwordz

+0

當然可以。只需一分鐘 –

回答

2

OSGi包既不是獨立的過程,也沒有組合通道吃了線程。一個bundle不會「運行」,它的代碼會在任意點上的零或多個線程的執行路徑上找到它自己。

因此,您的問題不是關於OSGi,而是關於Java中的一般多線程。如果要在等待答案的同時阻止某個線程,並希望其他代碼繼續運行,則必須確保其他代碼有自己的線程可以運行。

+0

這就是爲什麼我添加了多線程標籤:)。標題可能會讓你感到困惑,但是由於我在OSGi工作,我認爲這對那些遇到同樣問題的人可能會有所幫助。如果我理解正確,如果其他bundle沒有運行自己的線程,其他bundle上的等待方法總是會使它們停止? –

+0

我認爲,只要您放棄「運行捆綁」範例並開始思考運行*線程*,您就會意識到您可以自己回答問題。 –

+0

我有一個建議。我只是有一個線程,所以相反,使一個包等待線程完成,當倒計數變爲0時,我將從線程本身「觸發一個觸發器」。 –

相關問題