Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何终止封装函数的线程?_Java_Multithreading_Join - Fatal编程技术网

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+")!"

我正在做一个关于线的课程练习。 我的问题是,当函数完成时,如何终止一个包装函数(并获得最大生存时间)的线程,并在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;  
}

单向,处理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;
    }
}