16.线程阻塞原因

  1. 16.线程阻塞原因
    1. 16.1 题目
    2. 16.2 深入解析
    3. 16.3 答题示例
    4. 16.4 关键词联想

16.线程阻塞原因


16.1 题目

线程阻塞的原因可能有哪些?至少说出2种


16.2 深入解析

线程阻塞是指线程进入等待状态,无法继续执行,只有等到满足某些条件才能被重新调度。

造成线程阻塞的常见原因有:

  • 线程执行I/O(输入/输出)操作时:比如文件读写、网络通信、数据库查询时
  • 互斥锁阻塞:当多个线程访问共享数据时,如果互斥锁被另一个线程占用,其它线程会进入阻塞状态
  • 死锁阻塞
  • 线程休眠
  • 高优先级线程长期占用CPU,导致低优先级线程无法获得执行机会
    等。

16.3 答题示例

线程阻塞通常是因为它在等待某些资源或事件才能继续执行,常见原因包括:

  1. I/O 操作:如文件读写、网络请求或数据库访问时,线程会被挂起直到操作完成;
  2. 同步原语:调用 lock/Monitor.EnterMutexSemaphore 等时,如果资源被其他线程占用,就会阻塞;
    此外,死锁(多个线程互相等待对方的锁)和显式调用 Thread.Sleep 也会导致线程阻塞。

16.4 关键词联想

  • I/O 阻塞
  • 同步锁(lock/Monitor/Mutex
  • 信号量(Semaphore/SemaphoreSlim
  • 等待句柄(WaitHandle/AutoResetEvent/ManualResetEvent
  • 死锁(Deadlock)
  • 线程休眠(Thread.Sleep
  • 优先级反转
  • 非阻塞与异步
  • 抢占式调度 vs 协作式调度
  • 上下文切换开销


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏