多线程与锁:
namespace Threads
{
class Program
{
static void Main(string[] args)
{
Thread[] ths = new Thread[5];
for (int i = 0; i < ths.Length; i++)
{
ths[i] = new Thread(new ThreadStart(Print));
ths[i].Name = "Thread" + i;
}
foreach (Thread th in ths)
{
th.Start();
Thread.Sleep(5);
}
Console.ReadLine();
}
private static object locked = new object();
public static void Print()
{
lock (locked)
{
//显示线程信息。
Console.WriteLine(Thread.CurrentThread.Name);
Console.Write("你的号码是:");
for (int i = 0; i < 5; i++)
{
Thread.Sleep(100 * new Random().Next(5));
Console.Write(i+",");
}
Console.WriteLine();
}
}
}
}
简单线程池:
namespace ThreadPool2
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Main Thread:" + Thread.CurrentThread.ManagedThreadId);
Print p = new Print();
WaitCallback back = new WaitCallback(PrintTheNumbers);
for (int i = 0; i < 5; i++)
{
ThreadPool.QueueUserWorkItem(back, p);
}
Console.WriteLine("All tasks queued");
Console.ReadLine();
}
public static void PrintTheNumbers(object state)
{
Print p = (Print)state;
p.PrintNumber();
}
class Print
{
private object locked = new object();
public void PrintNumber()
{
lock (locked)
{
Console.WriteLine("ThreadName:" + Thread.CurrentThread.ManagedThreadId);
Console.Write("你的号码是:");
for (int i = 0; i < 5; i++)
{
Console.Write(i + ",");
Thread.Sleep(500);
}
Console.WriteLine();
}
}
}
}
}
本文通过两个实例介绍了如何使用多线程与线程池来提高程序的并发执行能力。首先展示了一个简单的多线程应用,通过使用锁机制确保了线程安全。接着介绍了一个简易线程池的实现,演示了如何将任务排队并由线程池中的线程异步执行。

被折叠的 条评论
为什么被折叠?



