一、并发问题演示代码如下,
class Program
{
static void Main(string[] args)
{
Printer printer = new Printer();
Thread[] threads = new Thread[10];//声明含有10个线程对象的数组
for (int i = 0; i < 10; i++)
{
threads[i] = new Thread(new ThreadStart(printer.PrintNumbers));//每个线程都指向PrintNumbers方法
threads[i].Name ="NO."+ i.ToString() + " Thread";
}
foreach (Thread t in threads)
{ t.Start(); }
Console.ReadKey();
}
}
public class Printer
{
public void PrintNumbers()
{
Console.WriteLine("{0} is printing", Thread.CurrentThread.Name);
for (int i = 0; i < 10; i++)
{
Console.WriteLine("{0}", i);
Thread.Sleep(2000);
}
}
}
二、线程同步
可以使用线程中的lock关键字,此代码范围内都是线程安全的,将代码改为
class Program
{
static void Main(string[] args)
{
Printer printer = new Printer();
Thread[] threads = new Thread[10];//声明含有10个线程对象的数组
for (int i = 0; i < 10; i++)
{
threads[i] = new Thread(new ThreadStart(printer.PrintNumbers));//每个线程都指向PrintNumbers方法
threads[i].Name ="NO."+ i.ToString() + " Thread";
}
foreach (Thread t in threads)
{ t.Start(); }
Console.ReadKey();
}
}
public class Printer
{
public void PrintNumbers()
{
lock (this)
{
Console.WriteLine("{0} is printing", Thread.CurrentThread.Name);
for (int i = 0; i < 10; i++)
{
Console.WriteLine("{0}", i);
Thread.Sleep(2000);
}
}
}
}