线程阻塞既是:
如果线程执行由于某种原因暂停,则可以认为线程阻塞。
我们常见的线程阻塞有:
hread.Sleep和Thread.Join方法
被阻塞的线程的基本操作原理:
被阻塞的线程会立刻将其处理器的时间片转移给其他线程,从此不再消耗处理器的时间,知道阻塞条件被满足。
判断线程是否被阻塞:
我们可以通过Thread.State来判断线程状态,值得一提的是,Thread.State是一个flag enum,可以通过二进制表示线程状态。
十进制数 | Thread.State | 备注 |
---|---|---|
0 | Running | 线程启动 |
1 | StopRequested | 请求线程停止 |
2 | SuspendRequested | 请求线程挂起 |
4 | Background | 后台线程执行转台 |
8 | Unstarted | 尚未对线程调用start |
16 | Stopped | 线程停止 |
32 | WaitSleepJoin | 线程已阻塞,可能调用了sleep或者join方法 |
64 | Suppended | 线程已挂起 |
128 | AbortRequ |