我已经阅读了许多关于如何关闭当前正在运行的线程的问题和答案,但是许多人使用了不推荐使用的方法“desroy()”。
我正在使用Java编写代码,该代码使用多线程同时多次打开Notepad可执行文件。我现在想要关闭这些可执行文件。有没有办法通过关闭/结束当前运行的线程来关闭这些文件而不调用不推荐的方法?
如果我需要详细说明或澄清任何要点,请随时告诉我。非常感谢您提供的任何帮助!
答案 0 :(得分:0)
如果您在线程中启动进程并且该进程完成或destroy()
,则线程可以自然完成。或者你可以在不等待进程完成的情况下中断线程,但这并不是因为你失去了对该进程的控制。
注意:即使Thread.destroy()
可用,它也没有杀死在该线程中启动的进程。
简而言之,尝试从线程中停止Process运行。
答案 1 :(得分:0)
同步发出信号停止(使用你想要的任何机制),加入它,然后让它被垃圾收集。
答案 2 :(得分:0)
我认为使用弃用的方法可能非常危险,这里有关于此的好文章:https://docs.oracle.com/javase/8/docs/technotes/guides/concurrency/threadPrimitiveDeprecation.html 您可以使用Thread.interrupt并在run()方法中实现这样的catch:
catch (InterruptedException ex){
Thread.currentThread().interrupt();
}
覆盖中断方法以关闭流:
private InputStream in;
@Override
public void interrupt() {
super.interrupt();
try {
in.close();
} catch (IOException e) {}
}
然后在你的方法main()中执行以下操作:
Thread t = new MyThread(in);
t.start();
Thread.sleep(1000);
t.interrupt();
t.join();
希望这会给你一些想法继续下去的想法..