守护程序线程:是否可以将正在运行的线程从用户线程更改为守护程序线程?

时间:2016-07-16 22:42:10

标签: java multithreading daemon

我在我的系统中使用第三方API,此API启动永久运行的用户线程。一旦我的程序结束,JVM就会因为那个线程而继续运行,所以我试图通过

来获取这个线程参考并进行更改
thread.setDaemon(true);

但它会抛出IllegalThreadStateException,因为该线程处于活动状态。我正在考虑使用反射来更改线程类的守护进程属性。它会起作用吗?还有另一种方法可以达到这个目的吗?

1 个答案:

答案 0 :(得分:0)

我建议使用像aspectj这样的东西来重写第三方api的字节码,在线程启动之前在代码中注入一个setDaemon调用。一旦线程启动,大多数Thread方法都是非法的,包括setDaemon,这里指定http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#setDaemon(boolean)