繁体   English   中英

多个线程如何执行我的方法?

[英]how can more than one thread execute my method?

嘿,很抱歉在这里提出这个问题,但是我的讲师不会为我提供过去的试卷答案。 多个线程如何执行我的oneTimeOnly()方法? 我需要采取哪些步骤来使其线程安全/仅由一个线程执行一次?

public class ExampleClass {
    private volatile boolean flag = false;
    public void someOperation() {
        if(flag != true) {
            oneTimeOnly();
        }
        flag = true;
    }
}

从字面上看,没有什么会阻止您的方法被执行多次。 只有在更高层次上理解,才能确保方法的主要逻辑仅执行一次。 我之所以这样说,是因为有些老师/采访者只是喜欢挑剔,和他们的学生/受访者玩无意义的智力游戏。

您的方法的问题在于,两个线程可能同时执行您的方法,并且只有在两个线程都完成后才将flag设置为true

您可以同步该方法,也可以使用AtomicBoolean来确保只有一个线程将其设置为true。 我认为这对于您的类分配来说太高级了,所以请坚持使用syncronized方法。

您应该声明您的方法为synchronized

public synchronized void someOperation() { 
...
}

这样,您可以确保一次仅一个线程正在执行您的方法的代码,从而确保该标志仅由第一个调用它的线程设置一次,并且访问它的所有其他线程都将发现它已经设置。

使方法同步或使用同步块,例如

公共无效同步oneTimeOnly(){}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM