所以我有一个客户端正在运行,我正在尝试暂停/恢复或在给定某个输入时关闭。如果“!”输入后,它会暂停线程或恢复线程,具体取决于它是否正在运行。如果输入“#”是否正在运行,则线程将关闭。
我觉得我很亲密,但我遇到了一些麻烦。继承我的代码:
while(true) {
Thread.State state = t.getState();
if(state == Thread.State.RUNNABLE) {
if(input.nextLine().equals("!")) {
t.suspend();
System.out.println("Sleeping");
System.out.println(state);
}
else if(input.nextLine().equals("#")) {
t.stop();
System.out.println("Closing");
System.out.println(state);
}
}
if(state == Thread.State.TIMED_WAITING) {
if(input.nextLine().equals("!")) {
t.resume();
System.out.println("Resuming");
System.out.println(state);
}
else if(input.nextLine().equals("#")) {
t.stop();
System.out.println("Closing");
System.out.println(state);
}
}
}
}
这段代码很有效。但是如果我要关闭线程,我必须输入#两次才能关闭它。
答案 0 :(得分:0)
我认为你很不好。
您应该避免使用Thread#pause(),Thread#resume()和Thread.stop(),尤其是Thread.stop()。它们是不推荐使用的函数,并且在JDK的未来版本中很快就会实现许多函数。
建议的方法来实现您希望它向线程发送信号(可选地,添加中断),并且线程本身知道信号变化并且自己进入目标状态。