1

我正在尝试在 Eclipse 中调试多线程应用程序。有3个线程

读写控制器

Read 和 Write 都可以访问 Controller 中的方法。当 Write 执行该 Controller 方法时,我正在尝试调试问题。

我在写线程和控制器中设置了一个断点。我中断了 Write 并关闭了网络连接以模拟我的错误并点击恢复,因此我在 Controller 中的断点处结束。

当我在那里时,控制器会正常工作:它会杀死读写线程(我认为)并启动新的读写线程。杀死读写后,我打开网络连接以模拟正在解决的问题。

这一切都很棒。现在应该发生的事情是一切都在继续进行。除了真正发生的是 Read 线程执行并且我再次到达我在 Controller 中设置的断点 - 与我之前从 Write 中命中的断点相同。更糟糕的是,它仍然认为网络连接不可用——这没有任何意义,因为我重新启用了它。

这一切都让我想知道我是否需要以某种方式阻止读取线程执行。我需要通过 Eclipse 暂停它吗?甚至可以从调试器中运行的应用程序中杀死线程吗?

标记

4

1 回答 1

0

我需要通过 Eclipse 暂停它吗?
不,没有必要为了你的代码工作而暂停一个线程。我很少暂停线程,当我怀疑它正在等待我不例外的东西时,我会这样做。我使用断点来控制停止,有时还使用属性。这是一个有趣的答案。

甚至可以从调试器中运行的应用程序中杀死线程吗?
,如果可能的话,对于当前的 Java 规范来说,这不是一个好主意。停止线程的一个好方法是使用标志正确退出 run() 方法:请参阅此处

你确定你退出你的读写线程吗?一种方法是在运行方法中添加调试信息:

run()
{
  System.out.println("start : " + this.getName());
  // do your process
  System.out.println("stop : " + this.getName());
}

日志记录有时比多线程中的调试更容易。没有代码很难更具体。

于 2013-04-24T07:15:27.967 回答