Thread 是1.1版本时候的线程 它默认是前台线程
前台线程:进程关闭后,线程还会执行完
无参数多线程
Console.WriteLine("主线程开始");
//不带参数的多线程
ThreadStart sta = () =>
{
Thread.Sleep(500);
Console.WriteLine("线程{0}开始执行方法",Thread.CurrentThread.ManagedThreadId);
};
//创建Thread
//实现多线程
for (int i = 0; i < 5; i++)
{
Thread t = new Thread(sta);
t.Start();
}
Console.WriteLine("主线程结束");
结果
有参数 多线程
Console.WriteLine("主线程开始");
//带参数多线程
ParameterizedThreadStart p = t =>
{
Thread.Sleep(1000);
Console.WriteLine("参数为{0},当前线程为{1}",t,Thread.CurrentThread.ManagedThreadId);
};
for (int i = 0; i < 5; i++)
{
Thread t = new Thread(p);
t.Start(i);
}
Console.WriteLine("主线程结束");
结果
回调函数
public static void Do3()
{
//Thread实现添加回调函数
//在我看来这就是伪回调
//正经的回调函数是如果有等待线程的话,等待只会等着方法体完成就算等待完成,而不会等待回调函数完成
//这种实现方法 会把回调函数也等待完成
Console.WriteLine("主线程开始");
ThreadStart sta = () =>
{
FirstFun();
CallBackFun();
};
List<Thread> tList = new List<Thread>();
for (int i = 0; i < 5; i++)
{
Thread t = new Thread(sta);
t.Start();
tList.Add(t);//加入集合中 方便等待
}
//等待
foreach (Thread t in tList)
{
//此效果就是将线程加入主线程当中 起到等待效果
t.Join();
}
Console.WriteLine("主线程结束");
Console.Read();
}
//委托方法
public static void FirstFun()
{
Thread.Sleep(1000);
Console.WriteLine("这里是主方法体内容,当前线程ID{0}",Thread.CurrentThread.ManagedThreadId);
}
//回调函数
public static void CallBackFun()
{
Thread.Sleep(1000);
Console.WriteLine("这里是回调函数内容,当前线程ID{0}", Thread.CurrentThread.ManagedThreadId);
}
调用Do3的结果
有回调函数 有返回值
public static void Do4()
{
//带参数带返回值
ParameterizedThreadStart p = t =>
{
string Rvalue = null;
Rvalue=FirstFun1((int)t);
CallBackFun1();
Console.WriteLine("结果{0}",Rvalue);
};
for (int i = 0; i < 5; i++)
{
Thread t = new Thread(p);
t.Start(i);
}
}
//委托方法
public static string FirstFun1(int i)
{
Thread.Sleep(1000);
Console.WriteLine("这里是主方法体内容,当前线程ID{0}", Thread.CurrentThread.ManagedThreadId);
return i.ToString();
}
//回调函数
public static void CallBackFun1()
{
Thread.Sleep(1000);
Console.WriteLine("这里是回调函数内容,当前线程ID{0}", Thread.CurrentThread.ManagedThreadId);
}
等待
ThreadStart sta = () =>
{
FirstFun();
CallBackFun();
};
List<Thread> tList = new List<Thread>();
for (int i = 0; i < 5; i++)
{
Thread t = new Thread(sta);
t.Start();
tList.Add(t);//加入集合中 方便等待
}
//等待
foreach (Thread t in tList)
{
//此效果就是将线程加入主线程当中 起到等待效果
t.Join();
}