文章目录
(一)参考
基本概念:拜托!别再问我多线程的这些问题了
生命周期:10 张图聊聊线程的生命周期和常用 APIs
生产者消费者模型:多线程必考的「生产者 - 消费者」模型,看齐姐这篇文章就够了
她说的Java多线程,C#好像还不太一样
(二)C#新建线程
(1)导入using System.Threading;
命名空间
(2)新建 线程对象
Thread t=new Thread(具体方法的引用);
(3)启动线程
t.Start();
(4)例子
Main()是一个主线程,t是新建线程——这两个线程“公平竞争”,抢占CPU资源
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace ConsoleApplication3
{
class Program
{
//新建方法(“新线程”来调用)
public static void SpeakWhatLanguage()
{
for (int i = 0; i < 100; i++)
{
Console.WriteLine("新线程newThread" +"__"+ i);
}
}
static void Main(string[] args)
{
Thread t = new Thread(SpeakWhatLanguage);
t.Start();
for (int j = 0; j < 100; j++)
{
Console.WriteLine("主线程" + j);
}
Console.ReadKey();
}
}
}
(三)C#线程 生命周期
不清楚,挂起应不应该算是“阻塞”,因为之前看别的博客,说是“挂起”和“阻塞”不是一回事儿
不清楚,I/O操作导致的阻塞是怎么一回事
以上是我总结的,下面是微软官方
给出的线程状态
(四)C#线程 相关方法
C#和Java相比,没有Notify()、NotifyAll()方法,与之类似的是Interrupt()
(1) Join() 实例方法
调用此方法的线程,独占CPU,其它线程阻塞——当此调用线程执行完,其它线程才解除阻塞,去抢占CPU。
(2)Sleep() 静态方法
写在主线程里,是主线程睡眠;写在新线程 方法里,是新线程睡眠。
(3)Interrput() 实例方法
Interrupt 对 新线程Sleep静态方法的打断——新线程不再是等待5秒后再开始,而是和CPU公平竞争CPU。
(4)Suspend() 实例方法
新线程Suspend后,只执行主线程
(5)Resume() 静态方法
以上挂起,恢复后,主线程、新线程,又开始公平竞争。
(6)Abort()实例方法
中止线程,新线程中止后,只执行主线程
(7)Yield()静态方法
只是让当前线程重新进入“就绪”状态——至于下一步,操作系统调度主线程还是新线程,说不定——没看出它的作用,想研究的话请看以下链接
线程相关方法之yield方法