我一直在做这个学术练习。我知道这很简单,但我无法理解。
这是任务:
创建一个接受线程t和k数的方法。这种方法直到t终止,等待时间长达k秒。如果t在此期间终止,否则如果超时则返回false已结束。
这就是我尝试的:
public static boolean myJoin(Thread t, int k){
boolean flag = true;
Thread t1 = new Thread(){
public void run(){
try {
t.join();
}
catch (InterruptedException e) {
}
}
};
t1.start();
try {
t1.sleep(k);
flag = false;
} catch (InterruptedException e){
}
t1.interrupt();
return flag;
}
我的第一个问题是为什么不能使用Thread::join,这正是您想要实现的。
话虽如此,如果你试图实现一个与之大致相同的方法,为什么不按照JDK对该方法的标准定义对你的解决方案进行建模呢?即Thread.java
public final synchronized void join(long millis)
throws InterruptedException {
long base = System.currentTimeMillis();
long now = 0;
if (millis < 0) {
throw new IllegalArgumentException("timeout value is negative");
}
if (millis == 0) {
while (isAlive()) {
wait(0);
}
} else {
while (isAlive()) {
long delay = millis - now;
if (delay <= 0) {
break;
}
wait(delay);
now = System.currentTimeMillis() - base;
}
}
}
其中isAlive和wait都是Thread上的公共方法,因此您可以传入一个线程并使用与该实例关联的方法。