2012-10-16 21 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是一个参考。

相关问题