线程启动
无参形式
using System.Diagnostics;
internal class Program
{
public static void ThreadProc()
{
for(int i = 0; i < 10; i++)
{
Console.WriteLine("这是子线程:"+i );
Thread.Sleep(0);
}
}
private static void Main(string[] args)
{
new Thread(ThreadProc).Start();
for(int i = 0; i < 4; i++)
{
Console.WriteLine("这是主线程:"+i);
Thread.Sleep(0);
}
}
}
有参形式
两种传参形式
new Thread(new ParameterizedThreadStart(ThreadProc)).Start("go go go");
new Thread(ThreadProc).Start("stop stop stop");
using System.Diagnostics;
internal class Program
{
public static void ThreadProc(object str)
{
for(int i = 0; i < 10; i++)
{
Console.WriteLine("这是子线程:"+i+",这是父线程传入的参数:"+str );
Thread.Sleep(0);
}
}
private static void Main(string[] args)
{
new Thread(new ParameterizedThreadStart(ThreadProc)).Start("go go go");
new Thread(ThreadProc).Start("stop stop stop");
for(int i = 0; i < 4; i++)
{
Console.WriteLine("这是主线程:"+i);
Thread.Sleep(0);
}
}
}
线程终止
using System.Diagnostics;
internal class Program
{
public static void ThreadProc(object str)
{
try
{
for (int i = 0; i < 10; i++)
{
Console.WriteLine("这是子线程:" + i + ",这是父线程传入的参数:" + str);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
private static void Main(string[] args)
{
Thread thread = new Thread(ThreadProc);
thread.Start("go go go ");
for(int i = 0; i < 4; i++)
{
if (i == 3)
{
Console.WriteLine("终止子线程");
thread.Interrupt();
}
Console.WriteLine("这是主线程:"+i);
}
}
}
Lock 块
using System.Diagnostics;
internal class Program
{
private static object lockToken = new object();
public static void thread(object str)
{
lock(lockToken)
{
for(int i = 0; i < 5; i++)
{
Console.WriteLine($"现在是线程{str}的第{i+1}次运行");
}
}
}
private static void Main(string[] args)
{
Thread a = new Thread(thread);
a.Start("a");
Thread b = new Thread(thread);
b.Start("b");
}
}
Monitor
using System.Diagnostics;
internal class Program
{
private static object lockToken = new object();
public static void thread(object str)
{
Monitor.Enter(lockToken);
//lock(lockToken)
{
for(int i = 0; i < 5; i++)
{
Console.WriteLine($"现在是线程{str}的第{i+1}次运行");
}
}
Monitor.Exit(lockToken);
}
private static void Main(string[] args)
{
Thread a = new Thread(thread);
a.Start("a");
Thread b = new Thread(thread);
b.Start("b");
}
}
Mutex
using System.Diagnostics;
internal class Program
{
static Mutex mutex = new Mutex();
public static void thread(object str)
{
mutex.WaitOne();
for (int i = 0; i < 5; i++)
{
Console.WriteLine($"现在是线程{str}的第{i+1}次运行");
}
mutex.ReleaseMutex();
}
private static void Main(string[] args)
{
Thread a = new Thread(thread);
a.Start("a");
Thread b = new Thread(thread);
b.Start("b");
}
}