当前位置: 首页 > 知识库问答 >
问题:

你能给父线程抛出一个异常吗

子车超英
2023-03-14

我应该实现一个原始的多线程服务器,为每个连接启动一个新线程。

其中一个线程可能会收到关闭服务器的消息。

是否可以从其中一个子线程通知父线程停止接受新连接并关闭服务器?

共有2个答案

谷奕
2023-03-14

您可能知道,您可以在多个线程上共享变量。

您可以使用布尔变量,例如ExctionOcureserverShutdown,它将默认为false,并且在每个线程中的异常处理程序中,您将此变量设置为true。

在主线程中,您将监视该变量的值,并在该变量变为true时执行必要的工作(即停止所有线程等)。

为了实现这一点,您必须首先阅读关于挥发性关键字

喻昀
2023-03-14

线程间通信有几种方式:

  1. 您可以保留一个共享状态(多线程中的罪恶根源)并进行更新,然后让主线程多次检查该状态(使用volatile或barriers)
 类似资料:
  • 我目前有以下示例代码,我试图将OutputStream转换为InputStream,这是我从http://blog.ostermiller.org/convert-java-outputStream-InputStream中的获得的想法 但这里我的问题是,save方法可能会抛出IOException,我希望捕获它,并将其作为getInputStream方法的一部分重新抛出。 我读过如何从线程捕捉异

  • 抛出异常的行为是否可能抛出不同的异常? 为了抛出异常,必须(可选地)分配新对象,并调用其构造函数(隐式调用fillinstacktrace)。在某些情况下,听起来像addSupressed也被称为。那么如果没有足够的内存会发生什么呢?JVM是否需要预分配内置异常?例如,(1/0)会抛出OutOfMemoryError而不是ArithmeticException吗? 此外,构造函数是一个方法调用,因

  • 我正在为以下Java代码编写单元测试: 我试图模拟myService抛出错误的过程。myMethod(),以便在上面代码的catch块中提取它,并抛出MyException实例。 在我的JUnit测试中(使用org.springframework.test.context.junit4. SpringJUnit4ClassRunner和Mockito),我嘲笑了MyService并将其作为Spri

  • 我需要从java调用scala代码,因此需要告诉编译器某个方法抛出某些异常。对于一个异常很容易做到这一点,但是我很难声明一个方法抛出多个异常。 这不起作用:

  • 问题内容: 考虑以下代码: 无需添加方法签名即可编译该代码。(它与同样表现到位,太)。 我理解为什么 可以 安全地运行它,因为实际上不能将其引发在块中,因此不能引发已检查的异常。我有兴趣知道在何处指定此行为。 并非永远都不会达到目标:以下代码也会编译: 但是,如果抛出一个检查的异常,它不会像我期望的那样编译: 在JLS Sec 11.2.2中 ,它说: 一,其抛出的表达式语句(§14.18)具有静

  • 在你可以捕获异常之前,一些代码必须抛出一个异常。任何代码都可能会抛出异常:您的代码,来自其他人编写的包(例如Java平台附带的包)或Java运行时环境的代码。无论是什么引发的异常,它总是通过 throw 语句抛出。 您可能已经注意到,Java平台提供了许多异常类。所有类都是Throwable类的后代,并且都允许程序区分在程序执行期间可能发生的各种类型的异常。 您还可以创建自己的异常类来表示在您编写