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

执行后将子线程的状态传递给其父线程

邹弘
2023-03-14

我想从可运行线程抛出异常,但不可能从线程抛出它,所以我们可以将chlild线程的状态(任何异常)传递给父线程吗?.

我读到过thread.join(),但在这种情况下,父线程会一直等到子线程完成执行。

在我的例子中,我的父线程在一段时间后逐个启动线程,但当任何线程抛出异常时,它应该将失败通知paent,以便父线程不会启动其他线程。

有什么方法可以实现吗?谁能帮我解决这个问题。

共有3个答案

钱照
2023-03-14

使用并发集合在父线程和子线程之间进行通信。在您的run方法中,执行try/catch块以接收所有异常,如果发生异常,则将其附加到用于与父线程通信的集合中。父应检查集合以查看是否发生任何错误。

麹耘豪
2023-03-14

您可以使用Callable

郭翰墨
2023-03-14

要详细说明@zeller的答案,可以执行以下构造:

//Use a Callable instead of Runnable to be able to throw your exception
Callable<Void> c = new Callable<Void> () {
    public Void call() throws YourException {
        //run your task here which can throw YourException
        return null;
    }
}

//Use an ExecutorService to manage your threads and monitor the futures
ExecutorService executor = Executors.newCachedThreadPool();
List<Future> futures = new ArrayList<Future> ();

//Submit your tasks (equivalent to new Thread(c).start();)
for (int i = 0; i < 5; i++) {
    futures.add(executor.submit(c));
}

//Monitor the future to check if your tasks threw exceptions
for (Future f : futures) {
    try {
        f.get();
    } catch (ExecutionException e) {
        //encountered an exception in your task => stop submitting tasks
    }
}
 类似资料:
  • 这是一个关于Java中多线程的初学者问题。 根据我的理解,当创建多个(用户)线程来运行程序或应用程序时,就没有父线程和子线程的概念。它们都是独立的用户线程。 因此,如果主线程完成执行,那么另一个线程(Thread2)仍将继续执行,因为在Thread2的执行线程完成之前,它不会被JVM杀死(https://docs.oracle.com/javase/6/docs/api/java/lang/Thr

  • 我正在尝试设置一个使用React的页面。该页面有一个下拉菜单组件,它应该触发父级中的状态更新。我尝试了以下几个例子,但没有任何效果。以下是我尝试过的两种方法的简化示例: > 将回调作为更新父状态的道具传递给子节点: }); 这始终显示“失败”,而不是“1”或“2”。 让父级使用onChange而不是回调获取下拉菜单的值。 }); }); 如果我尝试渲染状态,我可以在下拉组件中看到状态更改,但父级没

  • 问题内容: 我正在编写的应用程序在某个阶段会生成一个ArrayList of Characters。在此阶段,我正在尝试创建一个线程来处理此ArrayList。问题是如何将这个ArrayList传递给线程 描述代码: ProcessList的描述性代码: 我的问题是:如何在run()中传递和访问aList? 问题答案: 您可以简单地传递给的构造函数,该构造函数可以保留引用,直到需要它为止: 注意:

  • 编辑了我的问题以进行澄清和编码: 我的目标是将我的String数据从我的后台线程传递到我的主应用程序线程。感谢任何帮助。 下面是创建主后台线程的代码。这是位于我的Server.java类 下面是连接客户端时调用的代码,它位于我的 Controller.java类中。 然后程序为我的客户机创建两个后台线程,一个管理接收消息,一个管理发送消息。 然后,线程成功地创建了inputstream,并将对象传

  • 根据http://wiki.apache.org/jmeter/JMeterFAQ我应该能够在jmeter Gui中指定jmeter测试计划的用户/线程数,如下所示: 其中defaultvalue可以是1,2,3,无论什么。。。 当我尝试这样做时,我的测试甚至没有开始。 有什么提示吗? 谢谢

  • 本文向大家介绍C#程序将参数传递给线程,包括了C#程序将参数传递给线程的使用技巧和注意事项,需要的朋友参考一下 要使用线程,请在代码中添加以下命名空间- 首先,您需要在C#中创建一个新线程- 上面,threadDemo是我们的线程函数。 现在将参数传递给线程- 上面设置的参数是- 示例 让我们看完整的代码,以将参数传递给C#中的线程。 输出结果