【发布时间】:2015-03-23 14:48:29
【问题描述】:
我正在做关于线程的课程练习。 我的问题是如何在函数完成时终止包装函数的线程(并获得最大存活时间)并在 java 中返回结果。
这是一个函数的例子:
public static boolean isPrime(long n){
boolean ans=true;
if(n<2)throw new RuntimeException("ERR: the parameter to the isPrime function must be >1 (got "+n+")!");
int i=2; double ns=Math.sqrt(n) ;
while(i<=ns&&ans){
if (n%i==0) ans=false;
i=i+1;
}
if(Math.random()<Ex4_tester.ENDLESS_LOOP)while(true);
return ans;
}
这是我的代码,我不确定它是否有效:
public class Ex4 {
private class myThread extends Thread {
private long n;
private boolean ans;
private boolean finish = false;
public myThread(Long n) {
this.n = n;
}
@Override
public void run() {
ans = Ex4_tester.isPrime(n);
finish = true;
System.out.println(ans);
}
}
@SuppressWarnings("deprecation")
public boolean isPrime(long n, double maxTime) throws RuntimeException, InterruptedException {
myThread check = new myThread(n);
check.start();
try {
check.join((long)(maxTime * 1000));
}
catch (InterruptedException e) {
e.printStackTrace();
}
if ((check.isAlive()) && (check.finish)) {
check.stop();
}
return check.ans;
}
}
【问题讨论】:
-
@AlexisKing:我不认为这是一个骗局。这里的 OP 似乎在询问如何在其
run方法完成时终止线程;所以答案是“你不需要做任何特别的事情,它会自动发生”。 -
@ruakh 是的,你是对的,我误解了这个问题。
-
@ruakh,他在问如何在设定的时间后杀死一个线程,他的代码正在使用已弃用且不安全的
stop()调用。我认为他正在试图杀死一个线程。 -
如果你能使用
Future,我想你会有更好的运气。
标签: java multithreading join