2、线程的创建
using System;
using System.Threading;
namespace Threading
{
class Program
{
public static void Thread1()
{
Console.WriteLine("Thread1 starts");
}
public static void Thread2(object data)
{
Console.WriteLine("Thread2 starts,para:{0}", data.ToString());
}
static void Main(string[] args)
{
var t1 = new Thread(Thread1);
t1.Start();
var t2 = new Thread(Thread2);
t2.Start("thread2");
Console.ReadKey();
}
}
}
  输入:
  Thread1 starts
  Thread2 starts,para:thread2
  3、线程的管理
  sleep()挂起和Abort() 销毁线程
  通过抛出 threadabortexception 在运行时中止线程。这个异常不能被捕获,如果有 finally 块,控制会被送至 finally 块
using System;
using System.Threading;
namespace Threading
{
class Program
{
public static void Thread1()
{
Console.WriteLine("Thread1 starts");
Console.WriteLine("Thread1 Paused for 5 seconds");
Thread.Sleep(5000);
Console.WriteLine("Thread1 resumes");
}
static void Main(string[] args)
{
var t1 = new Thread(Thread1);
t1.Start();
Console.ReadKey();
}
}
}
using System;
using System.Threading;
namespace Threading
{
class Program
{
public static void Thread1()
{
try
{
Console.WriteLine("Thread1 starts");
for (int i = 0; i <= 10; i++)
{
Thread.Sleep(500);
Console.WriteLine(i);
}
Console.WriteLine("Thread1 Completed");
}
catch (ThreadAbortException ex)
{
Console.WriteLine("Thread1 Abort Exception");
}
finally
{
Console.WriteLine("Couldn't catch the Thread1 Exception");
}
}
static void Main(string[] args)
{
//开启子线程
var t1 = new Thread(Thread1);
t1.Start();
//主线程挂起2s
Thread.Sleep(2000);
//终止t1子线程
t1.Abort();
Console.ReadKey();
}
}
}
  销毁代码执行结果:

  四、线程池
  在多线程程序中,线程把大部分的时间花费在等待状态,等待某个事件发生,然后才能给予响应我们一般用ThreadPool(线程池)来解决;线程平时都处于休眠状态,只是周期性地被唤醒我们使用使用Timer(定时器)来解决。
  由于线程的创建和销毁需要耗费一定的开销,过多的使用线程会造成内存资源的浪费,出于对性能的考虑,于是引入了线程池的概念。线程池维护一个请求队列,线程池的代码从队列提取任务,然后委派给线程池的一个线程执行,线程执行完不会被立即销毁,这样既可以在后台执行任务,又可以减少线程创建和销毁所带来的开销。线程池线程默认为后台线程。
  线程池自动管理线程线程的创建和销毁。
  代码展示:
using System;
using System.Threading;
namespace Threading
{
class Program
{
public static void Thread1(object data)
{
Console.WriteLine("Thread1 => {0}",data.ToString());
}
static void Main(string[] args)
{
//控制线程数大小
//第一个参数是:线程池中辅助线程的大数目
//第二个参数是:线程池中异步 I/O 线程的大数目
ThreadPool.SetMaxThreads(3, 3);
for (int i = 0; i < 10; i++)
{
//ThreadPool是静态类无需实例化,
//ThreadPool.QueueUserWorkItem(new WaitCallback(Thread1), i);
ThreadPool.QueueUserWorkItem(Thread1, i);
}
Console.WriteLine("Thread1 sleep");
Thread.Sleep(100000);
Console.WriteLine("Thread1 end");
Console.ReadKey();
}
}
}