C# 中:因 Monitor 阻塞的线程能否靠 AutoResetEvent 恢复执行?示例解析!
在C#中,`Monitor`类用于对共享资源进行同步访问。当一个线程进入阻塞状态时,它无法继续执行,直到获得`Monitor`对象的锁。 `AutoResetEvent`类是一个同步对象,用于在等待一组线程完成操作时同步线程。当调用`AutoResetEvent.Set()`方法时,它会唤醒等待的线程并允许它们继续执行。 如果一个线程因为`Monitor.Stop()`方法而进入阻塞状态,该线程将无法自行恢复执行。它需要外部干预才能恢复执行。在这种情况下,可以使用`AutoResetEvent`来唤醒该线程。 以下是一个示例代码: ```csharp using System; using System.Threading; class Program { static void Main(string[] args) { AutoResetEvent autoResetEvent = new AutoResetEvent(false); bool stopFlag = false; Thread thread = new Thread(() => { while (!stopFlag) { // 模拟工作线程正在执行任务 Thread.Sleep(1000); Console.WriteLine("Working..."); } }); thread.Start(); // 主线程等待5秒后,通过Monitor对象来阻塞工作线程 Thread.Sleep(5000); Monitor.Enter(autoResetEvent); stopFlag = true; // 标记工作线程需要停止 Monitor.Wait(autoResetEvent); // 阻塞主线程,等待外部唤醒 Monitor.Exit(autoResetEvent); Console.WriteLine("Main thread has signaled to stop the worker thread."); } } ``` 在上面的示例中,我们创建了一个工作线程和一个`AutoResetEvent`对象。工作线程在一个循环中执行任务并打印消息。主线程在等待5秒钟后,使用`Monitor`对象来阻塞工作线程,并设置`stopFlag`标志为`true`。然后,主线程调用`Monitor.Wait(autoResetEvent)`来阻塞自己,并等待外部唤醒。一旦工作线程停止执行,主线程将通过`Monitor.Exit(autoResetEvent)`方法释放阻塞状态,并打印一条消息。 这个示例中的代码是为了演示目的而简化的。在实际应用中,您可能需要更复杂的逻辑来管理线程的启动和停止。 ######[AI写代码神器 | 513点数解答 | 2023-11-09 17:54:55]
- Java实现链表反转:迭代与递归双解法详解及开发实战指南(DeepSeek | 1409点数解答 | 2026-03-15 15:09:29)33
- 50 分判断题大揭秘:变量、条件、循环与数组知识正误辨析(字节豆包 | 229点数解答 | 2025-12-21 19:15:16)70
- 探寻数组中最长摆动子序列长度:思路剖析与代码优化(GPT | 758点数解答 | 2024-12-23 23:18:29)274
- 独家剖析:求解数组最长摆动子序列长度的代码实现与改进建议(GPT | 350点数解答 | 2024-12-23 23:20:54)271
- Python开发必懂:同步、异步、阻塞、非阻塞概念全解析(阿里通义 | 263点数解答 | 2023-11-08 00:56:38)237
- Golang开发:解析JSON数据时数值默认类型及示例解析(百度文心 | 393点数解答 | 2023-11-09 18:13:06)284
- 多线程实现自行车生产线:含图形界面与同步机制的生产者 - 消费者问题解决方案( | 713点数解答 | 2023-12-29 15:42:06)408
- SQL Working Areas Sizing: Manual vs. Automatic Policy - A Comprehensive Analysis(阿里通义 | 530点数解答 | 2024-05-13 10:55:58)312
- 揭秘Java开发中监视器内部的线程同步机制(百度文心 | 291点数解答 | 2023-11-09 17:16:49)271
- 揭秘 Android Memory Monitor:助力 Android 开发者优化应用内存性能(百度文心 | 236点数解答 | 2023-11-09 17:33:48)192
- Java 实现电脑组装:建造者模式的类图与代码全解析(字节豆包 | 2012点数解答 | 2025-03-20 15:28:28)217
- 不使用冒泡排序,用归并排序降序合并 bina 与 binb 并输出结果!(GPT | 48点数解答 | 2024-06-01 16:26:38)329