在C#中,ThreadLocal
类用于在每个线程中存储线程特定的数据。然而,ThreadLocal
本身并不能直接处理线程中断。线程中断是通过调用Thread.Interrupt()
方法来设置的,当线程处于阻塞状态(如等待I/O操作完成)时,调用此方法会引发InterruptedException
异常。
要在ThreadLocal
中处理线程中断,您需要在每个线程中处理InterruptedException
异常。这通常是通过在一个循环中捕获异常并检查中断状态来实现的。下面是一个示例:
using System; using System.Threading; class Program { private static readonly ThreadLocalthreadLocal = new ThreadLocal (); static void Main() { Thread thread1 = new Thread(Thread1); Thread thread2 = new Thread(Thread2); thread1.Start(); thread2.Start(); thread1.Join(); thread2.Join(); } static void Thread1() { while (!Thread.CurrentThread.IsInterrupted) { try { // 模拟一些工作 Thread.Sleep(1000); // 设置ThreadLocal值 threadLocal.Value = https://www.yisu.com/ask/42;"Thread1: {threadLocal.Value}"); } catch (InterruptedException ex) { // 处理中断异常 Console.WriteLine("Thread1: Interrupted"); Thread.ResetInterrupt(); // 重置中断状态 break; } } } static void Thread2() { while (!Thread.CurrentThread.IsInterrupted) { try { // 模拟一些工作 Thread.Sleep(1000); // 设置ThreadLocal值 threadLocal.Value = https://www.yisu.com/ask/99;"Thread2: {threadLocal.Value}"); } catch (InterruptedException ex) { // 处理中断异常 Console.WriteLine("Thread2: Interrupted"); Thread.ResetInterrupt(); // 重置中断状态 break; } } } }
在这个示例中,我们创建了两个线程,每个线程都有自己的ThreadLocal
实例。在每个线程的工作循环中,我们捕获InterruptedException
异常并处理它。如果线程被中断,我们会重置中断状态并退出循环。这样,您就可以在ThreadLocal
中处理线程中断了。