2012-10-16 18 views
1

如何檢測時,下面的代碼/線程執行完畢的黑莓:如何檢測一個線程何時在黑莓中完成執行?

UiApplication.getUiApplication().invokeAndWait(new Runnable() { 
     public void run() {    
      EventInjector.KeyEvent inject = new EventInjector.KeyEvent 
        (EventInjector.KeyEvent.KEY_DOWN,Characters.ENTER, 0); 
         inject.post(); 
         inject.post(); 
     } 
    }); 

我可以得到一個通知,當該線程執行,這樣我可以啓動另一個線程? 在此先感謝。

+0

你可以把一個新的線程代碼裏面: - UiApplication.getUiApplication()invokeAndWait(Runnable的新(){ 公共無效的run(){ 新 線程(){ 運行 (){ 。 // ..輸入你想要執行的代碼 } } .start(); } } –

回答

0

您需要一個同步塊,here是它如何工作的簡短說明。

「睡眠」線程必須鎖定一個對象,並調用wait()。 另一個線程鎖定相同的對象,併發送notify()或notifyAll()來喚醒第一個對象。

如果你明確啓動線程(不是在這種情況下),你可以簡單地調用join(),並同步等待它完成。

- 編輯:使用join()方法的線程

假設你已經有一個Runnable對象:

Thread myThread = new Thread(myRunnable); 
myThread.start(); 
doOtherStuff(); 
myThread.join(); 

但是,如果出現問題,你是卡在了join()方法調用,因爲BlackBerry沒有這個電話的超時時間。

+0

我認爲join()方法適合我,但是我怎樣才能用我的代碼片段來實現?這樣我想加入的線程我需要確認所有運行線程的運行順序 –

+0

以下是我的代碼: –

+0

while(總共> 0){\t \t線程t1 = new Thrd1(); \t \t \t \t t1.start(); \t \t \t \t嘗試{\t t1.join(); \t \t \t \t} catch(InterruptedException e){\t e.printStackTrace(); \t \t \t \t \t} \t \t \t \t \t \t \t線程T2 =新THRD2(); \t \t \t \t t2.start(); \t \t \t \t嘗試t2。加入(); \t \t \t \t} catch(InterruptedException e){\t \t \t e.printStackTrace(); \t \t \t \t \t} \t \t \t \t \t \t \t線程T3 =新Thrd3(); \t \t \t \t \t \t \t \t t3.start(); \t \t \t \t嘗試{t3.join(); \t \t \t \t}趕上(InterruptedException的發送){\t \t \t \t \t \t \t \t \t \t e.printStackTrace(); \t \t \t \t \t} \t \t \t \t \t \t \t \t \t \t \t線程T4 =新Thrd4(); \t \t \t \t t4.start(); \t \t \t \t嘗試{\t t4.join(); \t \t \t \t}趕上(InterruptedException的發送){\t \t \t \t \t \t \t \t \t \t e.printStackTrace(); \t \t \t \t \t} \t \t \t \t \t \t \t --total; –

0

通常,join()方法用於確定線程何時完成。調用join()通常會阻塞,因此請謹慎使用它。

Here是一個參考。

相關問題