客户端服务器暂停/恢复/关闭与线程状态

时间:2017-12-02 05:26:07

标签: java multithreading

所以我有一个客户端正在运行,我正在尝试暂停/恢复或在给定某个输入时关闭。如果“!”输入后,它会暂停线程或恢复线程,具体取决于它是否正在运行。如果输入“#”是否正在运行,则线程将关闭。

我觉得我很亲密,但我遇到了一些麻烦。继承我的代码:

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);
                    }
                }
            }

            }

这段代码很有效。但是如果我要关闭线程,我必须输入#两次才能关闭它。

1 个答案:

答案 0 :(得分:0)

我认为你很不好。

您应该避免使用Thread#pause()Thread#resume()Thread.stop(),尤其是Thread.stop()。它们是不推荐使用的函数,并且在JDK的未来版本中很快就会实现许多函数。

建议的方法来实现您希望它向线程发送信号(可选地,添加中断),并且线程本身知道信号变化并且自己进入目标状态。

参考:Why is Thread.stop deprecated?