2017-10-08 39 views
0

我有一個春季服務類:如何在Spring @Service內部創建原始實例變量線程安全?

@Service 
public class MyService { 
    private boolean flag = false; 

    public void method1() { 
    if(!flag) 
    // do something 
    flag = true; 
    } 

    public void method2() { 
    if(!flag) 
    // do something 
    flag = true; 
    } 
} 

很明顯的是,flag不是線程安全的。在不改變服務類的範圍的情況下,我有什麼選擇使它成爲線程安全的?能否使其變得易於解決目的? 我在發佈之前已經搜索瞭解決方案,但無法找到一個。

回答

1

如果你的任一方法被調用,你是否試圖只運行一次邏輯?如果是的話,你不能用@PostContruct預先做這個嗎?否則,你可以嘗試在現場使用同步,失去你的多線程優勢。

0

看來,你的目標是你不想method1method2在同一時間執行,建議使用某種utilities通過JDK併發控制

提供
相關問題