假设我有这样一段代码
public void run(){
Thread behaviourThread = new Thread(abstractBehaviours[i]);
behaviourThread.start();
}
我希望等待abstractBehaviours[i]运行方法完成或者运行了5000毫秒。我该怎么做?似乎behaviourThread.join(5000)不能做到这一点(我的代码有问题,我把它归结于这个)。
当然,所有的AbstractBehaviour类都是可运行的。我不想在每个run方法里实现它,因为那看起来很丑陋,而且有许多不同的行为,我更愿意在调用/执行线程中执行它,并只执行一次。
解决方案?这是我第一次做这么多线程的事情。谢谢!
编辑:所以打断的解决方案是理想的(需要最少的更改AbstractBehaviour实现)。但是,如果线程已经完成或者已经过了5000毫秒,我需要停止线程,因此像以下的代码可能无法正常工作,因为线程可能会在父线程中的while循环之前结束。有任何解决办法吗?我当然希望能够从启动线程的线程中完成它。
long startTime = System.currentTimeMillis();
behaviourThread.start();
while(!System.currentTimeMilis - startTime < 5000);
behaviourThread.interrupt();
try {
behaviourThread.join();
} catch (InterruptedException e1) {
e1.printStackTrace();
}
编辑:算了,我看到有一个Thread.isAlive()方法,我想问题都解决了。