我有一个从套接字读取数据的线程(比如说 T1):
public void run() {
while (running) {
try {
BufferedReader reader = new BufferedReader( new InputStreamReader(socket.getInputStream()) );
String input = reader.readLine();
} catch (IOException e) {
e.printStackTrace();
}
}
}
另一个线程(比如说 T2)尝试以它的一种方法完成程序。因此 T2 执行以下操作:
T1.running = false;
socket.close();
这是我找不到解决方案的情况:
- T1 处于活动状态并等待某些输入读取,即阻塞。
- 上下文切换
- T2 处于活动状态并将 running 设置为 false,关闭套接字
- 上下文切换
- 因为 T1 阻塞并且 T2 关闭了套接字,所以 T1 抛出异常。我想要的是捕捉这个 SocketException。我不能在 T1.run() 中放置 try/catch(SocketException)。那么我怎样才能在 T1 的运行方法中捕捉到它呢?如果在 T1 的跑步中无法捕捉到它,那么我如何在其他地方捕捉到它?
PS:“关于线程调试的另一个问题”
通常,当我逐步调试代码时,我会在上下文切换时丢失“活动运行线”。假设我在 T1 的第 20 行,发生上下文切换,假设程序从 T2 的 30.line 继续,但调试器没有转到/显示到 T2 的 30.line,而是“活动运行行” '消失。所以我失去了对代码的控制。我使用 Eclipse for Java 和 Visual Studio for C#。那么在上下文切换上进行调试时跟踪代码的最佳方法是什么?