在多线程代码中查找错误

时间:2015-07-16 13:38:24

标签: java multithreading

我在面试中遇到过这个问题,面试官要求我在这段代码中找到错误。

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


        }

    }

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

请建议。

1 个答案:

答案 0 :(得分:3)

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

        interruptedTask=true;

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