多線程計數(shù),怎么保持計數(shù)準(zhǔn)確的方法
首先使用設(shè)計模式中的單件模式,防止多次初始化對象,造成訪問空間的不一致。
計數(shù)處要加lock,將其他線程計數(shù)暫時阻塞,保證計數(shù)的正確性。
如果要想實(shí)時計數(shù)實(shí)時輸出,可以將計數(shù)和輸出處一并lock處理,不然不同線程的計數(shù)和輸出結(jié)果未必按順序處理,
如此加鎖能保證按順序處理按順序輸出,不過這樣多少都 損失了一些性能
代碼中加鎖位置很重要
此程序會增加三次運(yùn)算,原因是本線程未到200次,但是必然會有一個線程第一次增加所以在add里再做判斷
CommonSigleton MyCounter =CommonSigleton.Instance;
/// <summary>
/// 線程工作
/// </summary>
public void DoSomeWork()
{
///構(gòu)造顯示字符串
string results = "";
///創(chuàng)建一個Sigleton實(shí)例
System.Threading.Thread.Sleep(100);
int i = 0;
while (MyCounter.GetCounter() < 200)
{
//保證計數(shù)與輸出一致,即便計數(shù)與輸出之間加上時間間隔也會為這塊區(qū)域加鎖,防止其他線程操作
lock (this)
{
///開始計數(shù)
MyCounter.Add();
System.Threading.Thread.Sleep(100);
Thread thread = Thread.CurrentThread;
results += "線程";
results += i++.ToString() + "——〉" + thread.Name + " ";
results += "當(dāng)前的計數(shù):";
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();
}
}
相關(guān)文章
Java并發(fā)包線程池ThreadPoolExecutor的實(shí)現(xiàn)
本文主要介紹了Java并發(fā)包線程池ThreadPoolExecutor的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04
java項(xiàng)目導(dǎo)出為.exe執(zhí)行文件的方法步驟
最近做了個項(xiàng)目,想要轉(zhuǎn)換成可執(zhí)行文件,那么java項(xiàng)目如何導(dǎo)出為.exe執(zhí)行文件,本文就介紹一下,主要使用jar2exe軟件,感興趣的可以了解一下2021-05-05
Spring Cloud Config配置文件使用對稱加密的方法
Spring Cloud Config提供了兩種加密解密方式,一種是對稱加密,一種是非對稱加密。這篇文章將先展示如何使用對稱加密。感興趣的朋友跟隨腳步之家小編一起學(xué)習(xí)吧2018-05-05
Java下載遠(yuǎn)程服務(wù)器文件到本地(基于http協(xié)議和ssh2協(xié)議)
這篇文章主要介紹了Java下載遠(yuǎn)程服務(wù)器文件到本地的方法(基于http協(xié)議和ssh2協(xié)議),幫助大家更好的理解和使用Java,感興趣的朋友可以了解下2021-01-01

