我在我的系统中使用第三方API,此API启动永久运行的用户线程。一旦我的程序结束,JVM就会因为那个线程而继续运行,所以我试图通过
来获取这个线程参考并进行更改thread.setDaemon(true);
但它会抛出IllegalThreadStateException
,因为该线程处于活动状态。我正在考虑使用反射来更改线程类的守护进程属性。它会起作用吗?还有另一种方法可以达到这个目的吗?
答案 0 :(得分:0)
我建议使用像aspectj这样的东西来重写第三方api的字节码,在线程启动之前在代码中注入一个setDaemon调用。一旦线程启动,大多数Thread方法都是非法的,包括setDaemon,这里指定http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#setDaemon(boolean)