Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 查找多线程代码中的错误_Java_Multithreading - Fatal编程技术网

Java 查找多线程代码中的错误

Java 查找多线程代码中的错误,java,multithreading,Java,Multithreading,我在一次采访中遇到了这个问题,采访者要求我找出代码中的错误 public class Thread1 { private static boolean interruptedTask=false; private static class MyClass extends Thread{ public void run(){ while(!interruptedTask){

我在一次采访中遇到了这个问题,采访者要求我找出代码中的错误

public class Thread1 {


        private static  boolean interruptedTask=false;

        private static class MyClass extends Thread{

            public void run(){

                while(!interruptedTask){

                //Do some time consuming task for more than 5 secs

                }

            }

        }
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Thread task=new MyClass();
            task.start();

            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            interruptedTask=true;
            try {
                task.join();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }


        }

    }
我猜唯一错误的部分是interruptedTask变量应该是可变的,因为它在多个线程中使用

请建议

        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        interruptedTask=true;

我在这里看到的是,您总是将interruptedTask设置为true,即使您只是等待5000毫秒。你应该考虑把最后一行放在你的catch块中,得到我假设的是期望的行为。

你应该在你的问题中更具体。您尝试了什么,哪些不正常?@David这似乎是纯示例代码,不属于代码审查。请阅读@David-鉴于问题的标题,我认为代码不起作用,这使得代码审查非常离题。@rolfl:可能,这就是为什么它是一个建议,而不是一个接近票数的投票。虽然在这种情况下,OP可以很好地描述问题……这个问题最近在采访中被问到。我无法预测错误,这就是我发布的原因。我不确定代码的实际用途,但当你到达try块时,你将始终无法将interrupted设置为true。我假设您只想在catch块中捕获异常时将interrupted设置为true。也就是说,我没有丰富的java多线程经验,因此可能会有更多的经验。我不确定代码的实际用途。确切地OP向您提供的信息与面试中提供的信息相同。面试官希望OP能够发现代码中的反模式,无论代码的目的是什么,它实际上总是错误的。无法通过interruptedTask变量同步通信是我能看到的唯一这种反模式。提示:考虑一下如果您将interruptedTask的名称更改为timeToStop或shutdownRequested或类似名称,示例会是什么样子。如果您查看编辑历史记录,您会发现在我开始此讨论时,采访评论没有包括在内。