老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

lock(this)其實是個坑

這里不考慮分布式或者多臺負載均衡的情況只考慮單臺機器,多臺服務器可以使用分布式鎖。出于線程安全的原因,很多種場景大家可能看代碼中看到lock的出現,尤其是在資金類的處理環節。 但是lock(this)真的達到你的需求了嗎?下面用實例來說明

十余年的廬陽網站建設經驗,針對設計、前端、開發、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。營銷型網站建設的優勢是能夠根據用戶設備顯示端的尺寸不同,自動調整廬陽建站的顯示方式,使網站能夠適用不同顯示終端,在瀏覽器中調整網站的寬度,無論在任何一種瀏覽器上瀏覽網站,都能展現優雅布局與設計,從而大程度地提升瀏覽體驗。創新互聯公司從事“廬陽網站設計”,“廬陽網站推廣”以來,每個客戶項目都認真落實執行。

理論常識不多說,回到業務場景,舉個例子我們的需求一般就是在某個訂單進入某個安全優先級比較高的流程時要針對這筆訂單做到線程互斥。至于原因,這里再插一個概念,大部分orm在做更新操作時,實際上做的是全參數更新,所謂全參數更新,假如一個訂單表上有10個字段,我們只需要更新其中的一個金額字段,但是在傳統orm框架中實際上在訂單的實體類中賦值了所有字段而在更新操作中這些字段全部參與了更新,所以在高并發的場景下,如果有2個線程針對同一個訂單操作,并且沒有額外的保護程序(例如數據庫鎖、版本號等)那么在這種傳統框架下后一個線程更新可能就會覆蓋掉前一個線程的操作。因此lock的手段可以看成是一道保護墻。 那么接下來我們通過實例看一下lock4種不同方式(并非4種類別)之間的區別

代碼很簡單 在結果截圖后直接附上

1. Lock(this)
lock(this)其實是個坑
可以看出lock(this),如果this是個普通的類非靜態非單例,那么lock(this)并不滿足我們的需求,甚至除了當前線程并看不出有任何作用。

2. Lock(LockString)
lock(this)其實是個坑
Lock(LockString) 從結果上來看比較契合要求,對于同一筆訂單做到的線程互斥,對于不同訂單即使用到了同一個類也不干擾。不過根據大家的回復意見LockString并不適合鎖。

3. Lock(Object)
lock(this)其實是個坑

Lock(Object)和Lock(this)一樣,因為根本原因2者方式是相同的。推薦!

4. Lock(StaticObject)
lock(this)其實是個坑
Lock(StaticObject) 實現了對于同一筆的訂單線程互斥,但是不符合的是對于不同筆的訂單同樣進行了互斥。

結論一目了然,理論的內容不贅述。下面貼代碼
`
class Program
{
const string firstOrderId = "001";
const string secondOrderId = "002";
const string thirdOrderId = "003";

    static void Main()
    {
        test(LockType.LockThis);
        //test(LockType.LockString);
        //test(LockType.LockObject);
        //test(LockType.LockStaticObject);

        Console.ReadLine();
    }

    static void test(LockType lockType)
    {
        Console.ForegroundColor = ConsoleColor.Yellow;
        Console.WriteLine("------------測試相同訂單------------");
        Console.ForegroundColor = ConsoleColor.White;
        OrderPay(firstOrderId, 1, lockType);
        OrderPay(firstOrderId, 2, lockType);
        OrderPay(firstOrderId, 3, lockType);
        Thread.Sleep(10000);

        Console.ForegroundColor = ConsoleColor.Yellow;
        Console.WriteLine("------------測試不同訂單------------");
        Console.ForegroundColor = ConsoleColor.White;
        OrderPay(firstOrderId, 1, lockType);
        OrderPay(secondOrderId, 1, lockType);
        OrderPay(thirdOrderId, 1, lockType);
    }

    static void OrderPay(string orderId, int threadNo, LockType lockType)
    {
        new Thread(() => new Payment(orderId, threadNo).Pay(lockType)).Start();

        Thread.Sleep(10);
    }
}

public class Payment
{
    private readonly string LockString;
    public readonly int ThreadNo;
    private readonly Object LockObj = new object();
    private static readonly Object StaticLockObj = new object();

    public Payment(string orderID, int threadNo)
    {
        LockString = orderID;
        ThreadNo = threadNo;
    }

    public void Pay(LockType lockType)
    {
        ShowMessage("等待鎖資源");
        switch (lockType)
        {
            case LockType.LockThis:
                lock (this)
                {
                    showAction();
                }
                break;
            case LockType.LockString:
                lock (LockString)
                {
                    showAction();
                }
                break;
            case LockType.LockObject:
                lock (LockObj)
                {
                    showAction();
                }
                break;
            case LockType.LockStaticObject:
                lock (StaticLockObj)
                {
                    showAction();
                }
                break;
        }
        ShowMessage("釋放鎖");
    }

    private void showAction()
    {
        ShowMessage("進入鎖并開始操作");
        Thread.Sleep(2000);
        ShowMessage("操作完成,完成時間為" + DateTime.Now);
    }

    private void ShowMessage(string message)
    {
        Console.WriteLine(String.Format("訂單{0}的第{1}個線程 {2}", LockString, ThreadNo, message));
    }

}

public enum LockType
{
    LockThis = 0,
    LockString = 1,
    LockObject = 2,
    LockStaticObject = 3
}
`
希望對大家有幫助。

網頁題目:lock(this)其實是個坑
文章鏈接:http://www.xueling.net.cn/article/gcihcd.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 四虎网站最新网址 | 国产成人精品久久一区二区三区 | 香港三级韩国三级日本三级 | 一级播放| 亚洲欧美日韩精品久久久 | 99久久精品日本一区二区免费 | 两人视频在线播放免费观看网站 | 91cn在线观看 | 国产美女被遭高潮免费网站 | 亚洲国产无线乱码在线观看 | 人妻少妇精品视中文字幕国语 | 免费看一级视频 | 亚洲天堂区| 天天激情综合 | 久久亚洲激情 | 亚洲人成网站在线播放无码 | 国产色播视频 | 亚洲成片在线观看 | 日韩在线一区二区三区人 | 日韩午夜福利无码专区A | 真人一级毛片免费 | 草久av| 国产成人久久精品二三区无码 | 免费色播| 最新中文字幕av无码专区 | 中文字幕一区精品 | 精品亚洲国产成av人片传媒 | 欧美男同GV免费网站观看 | 亚洲啊啊啊啊啊 | 天天综合久久综合 | ww污污污网站在线看com | 永夜星河在线观看 | 女人毛片免费观看 | 国产精品喷白浆video | 亚洲国产日韩欧美 | 久久久久久精品无码午夜按摩师 | 国产精品女丝袜白丝袜 | 欧美专区日韩视频人妻 | 国产精品乱码高清在线看 | 欧美国产日韩中文 | 国产精品久久精品三级 |