/**
* 重启线程
* @return
*/
public boolean restart() {
try {
if(getState() == Thread.State.NEW)
start();
else {
Method method = Thread.class.getDeclaredMethod("exit");
method.setAccessible(true);
method.invoke(this);
stop();
method = Thread.class.getDeclaredMethod("init", ThreadGroup.class, Runnable.class, String.class, long.class,AccessControlContext.class);
method.setAccessible(true);
method.invoke(this, null, null, this.getName(), 0, null);
method = Thread.class.getDeclaredMethod("registerNatives");
method.setAccessible(true);
method.invoke(this);
Field field = Thread.class.getDeclaredField("threadQ");
field.setAccessible(true);
field.set(this, null);
field = Thread.class.getDeclaredField("eetop");
field.setAccessible(true);
field.set(this, 0L);
field = Thread.class.getDeclaredField("stillborn");
field.setAccessible(true);
field.set(this, false);
field = Thread.class.getDeclaredField("threadStatus");
field.setAccessible(true);
field.set(this, 0);
field = Thread.class.getDeclaredField("threadLocals");
field.setAccessible(true);
field.set(this, null);
field = Thread.class.getDeclaredField("inheritableThreadLocals");
field.setAccessible(true);
field.set(this, null);
field = Thread.class.getDeclaredField("nativeParkEventPointer");
field.setAccessible(true);
field.set(this, 0L);
field = Thread.class.getDeclaredField("parkBlocker");
field.setAccessible(true);
field.set(this, null);
field = Thread.class.getDeclaredField("blocker");
field.setAccessible(true);
field.set(this, null);
start();
}
} catch(Exception e) {
e.printStackTrace();
return false;
}
return true;
}
JAVA通过反射重启线程
最新推荐文章于 2024-06-30 03:49:08 发布