簡體   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