![](/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.