![](/img/trans.png)
[英]How to avoid generating more than one thread while Initializing the driver/synchronize to execute by only one thread
[英]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.