Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.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_Android_Multithreading_Beanshell - Fatal编程技术网

Java 关闭当前正在运行但没有循环的线程

Java 关闭当前正在运行但没有循环的线程,java,android,multithreading,beanshell,Java,Android,Multithreading,Beanshell,在创建应用程序时,我遇到了关闭一个线程的问题,该线程使用Beanshell运行用户输入的代码。thread.stop();没能杀死线程有什么想法吗?由于用户代码中存在循环,一次运行一行代码是不合理的 final Thread thread = new Thread() { public void run() { try { interpreter.run(); } catch (RuntimeException runEx) {

在创建应用程序时,我遇到了关闭一个线程的问题,该线程使用Beanshell运行用户输入的代码。thread.stop();没能杀死线程有什么想法吗?由于用户代码中存在循环,一次运行一行代码是不合理的

final Thread thread = new Thread() {
    public void run() {
        try {
            interpreter.run();
        } catch (RuntimeException runEx) {
            runEx.printStackTrace();
            Log.d("END OF BSH", "END OF BSH");
        }
    }
};
thread.start();
thread.interrupt();

您需要弄清楚如何告诉解释器终止,或者修改解释器以支持它(如果它还没有终止)。不能强制终止threads.Thread.interrupt();只向线程发出应该停止的信号,然后线程本身必须使用if(thread.interrupted())对其进行管理。一个非常糟糕的想法是在清单设置的服务中运行它作为自己的进程,以便在必要时可以杀死它。但这真的应该被视为绝对的最后手段——Android不喜欢进程“随机”死亡,在某些情况下会重新启动它们。请看一篇关于interrupt()、InterruptedException和friends的相当完整的文章。