亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

多線程計數,怎么保持計數準確的方法

 更新時間:2014年01月10日 15:35:41   作者:  
這篇文章主要介紹了多線程計數的方法,有需要的朋友可以參考一下

首先使用設計模式中的單件模式,防止多次初始化對象,造成訪問空間的不一致。

計數處要加lock,將其他線程計數暫時阻塞,保證計數的正確性。

如果要想實時計數實時輸出,可以將計數和輸出處一并lock處理,不然不同線程的計數和輸出結果未必按順序處理,

如此加鎖能保證按順序處理按順序輸出,不過這樣多少都 損失了一些性能

代碼中加鎖位置很重要

此程序會增加三次運算,原因是本線程未到200次,但是必然會有一個線程第一次增加所以在add里再做判斷

復制代碼 代碼如下:

CommonSigleton MyCounter =CommonSigleton.Instance;
  /// <summary>
  /// 線程工作
  /// </summary>
public void DoSomeWork()
{
    ///構造顯示字符串
    string results = "";

    ///創(chuàng)建一個Sigleton實例

    System.Threading.Thread.Sleep(100);

    int i = 0;
    while (MyCounter.GetCounter() < 200)
    {
        //保證計數與輸出一致,即便計數與輸出之間加上時間間隔也會為這塊區(qū)域加鎖,防止其他線程操作
        lock (this)
        {
            ///開始計數
            MyCounter.Add();
            System.Threading.Thread.Sleep(100);
            Thread thread = Thread.CurrentThread;
            results += "線程";
            results += i++.ToString() + "——〉" + thread.Name + " ";
            results += "當前的計數:";
            results += MyCounter.GetCounter().ToString();
            results += "\n";

            Console.WriteLine(results);

            // 清空顯示字符串
            results = "";
        }
    }
}

  public void StartMain()
  {

   Thread thread0 = Thread.CurrentThread;

   thread0.Name = "Thread 0";

   Thread thread1 =new Thread(new ThreadStart(DoSomeWork));

   thread1.Name = "Thread 1";

   Thread thread2 =new Thread(new ThreadStart(DoSomeWork));

   thread2.Name = "Thread 2";

   Thread thread3 =new Thread(new ThreadStart(DoSomeWork));

   thread3.Name = "Thread 3";

            thread1.Start();

            thread2.Start();

            thread3.Start();

   ///線程0也只執(zhí)行和其他線程相同的工作
   DoSomeWork();
  }
 }

相關文章

  • executor包執(zhí)行器功能

    executor包執(zhí)行器功能

    這篇文章主要介紹了executor包執(zhí)行器功能,executor包中的各個子包提供的功能,最終這些功能都由Executor接口及其實現類共同對外提供服務。下文介紹該執(zhí)行功能,具有一定的參考價值,需要的朋友可以考一下
    2022-02-02
  • 深入理解Java設計模式之適配器模式

    深入理解Java設計模式之適配器模式

    這篇文章主要介紹了JAVA設計模式之適配器模式的的相關資料,文中示例代碼非常詳細,供大家參考和學習,感興趣的朋友可以了解
    2021-11-11
  • maven安裝、使用、配置本地倉庫、idea配置maven以及解決plugins報錯問題

    maven安裝、使用、配置本地倉庫、idea配置maven以及解決plugins報錯問題

    本地倉庫是遠程倉庫的一個緩沖和子集,當你構建Maven項目時首先會從本地倉庫查找資源,如果沒有那么Maven會從遠程倉庫下載到你本地倉庫,這篇文章主要給大家介紹了關于maven安裝、使用、配置本地倉庫、idea配置maven以及解決plugins報錯問題的相關資料,需要的朋友可以參考下
    2024-01-01
  • SpringBoot整合RabbitMQ消息隊列的完整步驟

    SpringBoot整合RabbitMQ消息隊列的完整步驟

    這篇文章主要給大家介紹了關于SpringBoot整合RabbitMQ消息隊列的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-05-05
  • Java實現簡單畫畫畫板

    Java實現簡單畫畫畫板

    這篇文章主要為大家詳細介紹了Java實現簡單畫畫畫板,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Spring基礎篇之初識DI和AOP

    Spring基礎篇之初識DI和AOP

    這篇文章主要為大家詳細介紹了Spring基礎篇之初識DI和AOP,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • SSM?Mapper文件查詢出返回數據查不到個別字段的問題

    SSM?Mapper文件查詢出返回數據查不到個別字段的問題

    這篇文章主要介紹了SSM?Mapper文件查詢出返回數據查不到個別字段的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • springboot:接收date類型的參數方式

    springboot:接收date類型的參數方式

    這篇文章主要介紹了springboot:接收date類型的參數方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Spring Mybatis Mapper模糊查詢的幾種方法

    Spring Mybatis Mapper模糊查詢的幾種方法

    在Spring結合Mybatis進行開發(fā)時,實現模糊查詢是一個常見需求,在Mybatis中,LIKE查詢可以通過多種方式實現,本文給大家介紹了Spring Mybatis Mapper模糊查詢的幾種方法,需要的朋友可以參考下
    2024-03-03
  • SpringMVC異常處理知識點總結

    SpringMVC異常處理知識點總結

    在本篇文章里小編給大家整理的是關于SpringMVC異常處理相關知識點內容,需要的朋友們學習下。
    2019-10-10

最新評論