Java 如何终止封装函数的线程?
我正在做一个关于线的课程练习。 我的问题是,当函数完成时,如何终止一个包装函数(并获得最大生存时间)的线程,并在java中返回结果 这是一个函数示例:Java 如何终止封装函数的线程?,java,multithreading,join,Java,Multithreading,Join,我正在做一个关于线的课程练习。 我的问题是,当函数完成时,如何终止一个包装函数(并获得最大生存时间)的线程,并在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+")!"
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;
}
单向,处理InterruptedException,使用Thread.interrupt() 更多内容请阅读: 有关停止不带线程的线程的详细信息。stop():
@AlexisKing:我不认为这是个骗局。这里的OP似乎在询问当线程的
run
方法完成时如何终止线程;所以答案是“你不需要做任何特殊的事情,那只是自动发生的”。@ruakh是的,你是对的,我误解了这个问题。@ruakh,他在问如何在设定的时间后杀死线程,他的代码使用的是不推荐和不安全的stop()
调用。我认为他正在试图杀死一个线程。我认为如果你能使用一个线程,你的运气会好得多。如果你中断一个线程,它不会导致中断异常
,除非该线程被阻止在一个期望它的方法上,例如sleep()
@realpoincent:yes,这就是教程中提到的中断状态标志的用途。我有一个例子
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;
}
}