C#多線程
一 線程Thread的使用
(1)不通過委托,直接在線程里實現方法體
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
bool a =false;
bool b = false;
bool c = false;
Stopwatch watch = new Stopwatch();//測量運行時間
watch.Start();//開始計時
//線程1
Thread threadTest1 = new Thread(() =>
{
Thread.Sleep(2000);
Console.WriteLine("線程1結束消耗時間:{0}", watch.ElapsedMilliseconds);
a = true;//如果執行則返回true
});
//線程2
Thread threadTest2 = new Thread(() =>
{
Thread.Sleep(2000);
Console.WriteLine("線程2結束消耗時間:{0}", watch.ElapsedMilliseconds);
b = true;//如果執行則返回true
});
//線程3
Thread threadTest3 = new Thread(() =>
{
Thread.Sleep(2000);
Console.WriteLine("線程3結束消耗時間:{0}", watch.ElapsedMilliseconds);
c = true;//如果執行則返回true
});
threadTest1.Start();
threadTest2.Start();
threadTest3.Start();
threadTest2.Join();//等待其它線程執行結束
threadTest1.Join();
threadTest3.Join();
if (a == true && b == true && c == true)//當三個子線程全部執行完畢,則執行
{
Console.WriteLine("監控結束消耗時間:{0}", watch.ElapsedMilliseconds);
Console.Read();
}
}
}
}
執行結果:
(2)通過委托傳遞,可以帶參,也可以不帶參
class Program
{
static void Main(string[] args)
{
Stopwatch watch = new Stopwatch();//測量運行時間
watch.Start();//開始計時
//通過委托傳遞,將testMethod方法委托給線程執行
Thread t1 = new Thread(new ThreadStart(TestMethod));
Thread t2 = new Thread(new ParameterizedThreadStart(TestMethod));
t1.Start();
t2.Start("hello");
t1.Join();
t2.Join();
Console.WriteLine("總時間:{0}", watch.ElapsedMilliseconds);
Console.Read();
}
public static void TestMethod()
{
Console.WriteLine("不帶參數的線程函數");
}
public static void TestMethod(object data)
{
string datastr = data as string;
Console.WriteLine("帶參數的線程函數,參數為:{0}", datastr);
}
}
}<strong>
</strong>
執行結果:
二:使用task類實現多線程
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
bool a =false;
bool b = false;
bool c = false;
Stopwatch watch = new Stopwatch();//測量運行時間
watch.Start();//開始計時
var Task1 = Task.Factory.StartNew(() =>
{
Thread.Sleep(2000);
Console.WriteLine("線程1結束消耗時間:{0}", watch.ElapsedMilliseconds);
a = true;
});
var Task2 = Task.Factory.StartNew(() =>
{
Thread.Sleep(2000);
Console.WriteLine("線程2結束消耗時間:{0}", watch.ElapsedMilliseconds);
b = true;
});
var Task3 = Task.Factory.StartNew(() =>
{
Thread.Sleep(2000);
Console.WriteLine("線程3結束消耗時間:{0}", watch.ElapsedMilliseconds);
c = true;
});
Task.WaitAll(Task1, Task2, Task3);
if (a == true && b == true && c == true)
{
Console.WriteLine("監控結束消耗時間:{0}", watch.ElapsedMilliseconds);
Console.Read();
}
else
{
//Thread.Sleep(1);
Console.Read();
}
}
}
}
執行結果:
這三個demo只是對于剛剛接觸多線程的一個實踐,簡單易理解。
————————————————
版權聲明:本文為CSDN博主「jimmyBay」的原創文章,遵循CC 4.0 BY-SA版權協議
原文鏈接:https://blog.csdn.net/shiyiqijialimin/article/details/50664092
浙公網安備 33010602011771號