不确定我是否正确理解线程,在下面的示例中有人可以告诉我是对还是错:

class Task {
String taskName;
private Thread thread;
boolean isFinished;

public Task(String name){
    taskName = name;
}

public void createTask(final Runnable r) {
    thread = new Thread(r){
        public void run(){
            if(r != null) {
                r.run();
                isFinished = true;
            }
        }
    };
    thread.start();
}
}


我在应用程序中实际所做的是将isFinished设置为true,并且有一个观察者,只要isFinished为true,它就会执行某些操作。在我作为参数传递的isFinished中的所有代码实际终止之前,恐怕Runnable设置为true。

run方法不是应该将我传递的代码放在单独的线程中并异步运行该代码吗?

最佳答案

isFinished编写完成之前,r.run()的编写方式不会设置为true。可能会以其他方式出现,因为您可能由于缺少同步或缺少易失性声明而导致一些数据可见性问题。

有点奇怪,因为您都将Runnable传递给了构造函数,但是使用方法声明中的引用而不是线程内部的引用来调用它。但是它“有效”,那里只是多余的。

顺便说一句,不要忘记匿名类中的@Override :)

10-06 02:03