java - 线程内调用的函数中的无限循环会导致线程保持 Activity 状态

标签 java multithreading loops interrupt infinite

public class Ex4 extends Thread {
  boolean ans;
  boolean change=false;

  public boolean isPrime(long n, double maxTime) throws RuntimeException {
    final Thread a;
    Thread b;
    final RuntimeException e;
    final long num = n ;
    final double mtime = maxTime;
    a = new Thread(){
        public void run(){
                try{
                    ans = Ex4_tester.isPrime(num);
                    change=true;
                }
                catch ( RuntimeException exp){
                    throw exp;
                };
            }
    };
    a.start();
    try {
        sleep((long)mtime);
    } catch (InterruptedException e1) {
        e1.printStackTrace();
    }
    if(a.isAlive()){
        a.interrupt();
    }
    if(a.isInterrupted()){
        throw new RuntimeException("time for check exceeded");
    }
    return ans;
  }
}

一切正常,除了有时 Ex4_tester.isPrime 进入无限循环(没关系,它应该这样做)。 即使线程被中断,进程仍然运行并且线程实际上并没有停止的问题

最佳答案

线程被中断并不会停止它。它只会导致线程脱离某些等待和 sleep 状态。要让线程根据另一个线程的输入退出无限循环,请对循环中的 Atomic<> 进行显式检查,并让控制线程将原子变量的状态修改为线程“a”将退出循环的位置。

关于java - 线程内调用的函数中的无限循环会导致线程保持 Activity 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14326611/

相关文章:

multithreading - 确定机器上可用核心的数量?

python - 如何以直线打印元组内的列表

具有范围的 Java if 语句

java - Selenium 错误 MainClientExec :103 - Connection discarded

java - Vaadin Combobox - 无效自定义输入时不会出现错误

java - 在Java EE中持续运行服务

java - 使用线程更新 Java Applet 标签

ASP.NET 在文本框中显示列表框中选定的项目

r - 如何根据时间序列的列值提取日期?

Java 或 Scala RFC5987