ger*_*tom 1 java multithreading thread-safety
嘿,我很抱歉在这里问这个问题,但是我的讲师不会帮助我解决过去的试卷问题.多个线程如何执行我的oneTimeOnly()方法?我需要采取哪些步骤使其线程安全/仅由一个线程执行一次?
public class ExampleClass {
private volatile boolean flag = false;
public void someOperation() {
if(flag != true) {
oneTimeOnly();
}
flag = true;
}
}
Run Code Online (Sandbox Code Playgroud)
从字面意义上讲,没有什么能阻止你的方法被执行多次.只有在更高层次上理解,才能确保您的方法的主要逻辑只执行一次.我这样说是因为一些教师/采访者只是喜欢挑剔和与学生/受访者一起玩无意义的心灵游戏.
你的方法的问题在于,两个线程可以同时执行你的方法,并设置flag到true只有在既要完成.
您可以同步该方法,也可以使用一个AtomicBoolean可以确保只有一个线程将其设置为true的方法.我相信这对于你的班级作业来说太先进了,所以坚持使用一种syncronized方法.