Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当线程A死亡时,线程B在线程A内部产生的行为_Java_Multithreading - Fatal编程技术网

Java 当线程A死亡时,线程B在线程A内部产生的行为

Java 当线程A死亡时,线程B在线程A内部产生的行为,java,multithreading,Java,Multithreading,我希望在主线程释放资源时执行线程 我有主线 Thread mainThread = new Thread(() -> { //do things doAction(); //do other things }); 方法doAction()看起来像 public void doAction(){ Thread insideThread = new Thread(() -> { //do something }); insideT

我希望在主线程释放资源时执行线程

我有主线

Thread mainThread = new Thread(() -> {
    //do things
    doAction();
    //do other things
});
方法
doAction()
看起来像

public void doAction(){
   Thread insideThread = new Thread(() -> {
      //do something
   });

   insideThread.start();
}
现在看来,
insideThread
是在运行
main线程时执行的

主线程
死亡或释放时,
内部线程
会发生什么情况


我希望在
主线程死亡或释放时启动
insideThread

简单的解决方案:将
doAction()
更改为返回它正在创建的线程;这样,调用代码就可以在该线程上调用start();像这样:

public Thread doAction(){
  Thread insideThread = new Thread(() -> {
    //do something
  });

  return insideThread;
}
当然,您可以将该方法重命名为prepareAction()之类的名称,以表明它本身不“做”事情


编辑:这是实现您的需求的一个
选项;但核心问题是:不管该方法是否返回值;或者(例如)设置一些字段-要点是:如果您想控制另一个线程M中的线程T,那么M需要对该线程T的引用。这里没有魔法,任何对象只能“管理”它以某种方式知道的其他对象

我喜欢这个答案,因为代码可能早于任务,但我建议添加一个async/await和Tasks示例,因为这是处理上述问题的更现代的方法。@RagingCain谢谢;听起来是个好主意;但我不确定我今天是否到了那里。请随意编辑和改进我的答案。现在我想知道,提到我是一名选民是否会像受贿未遂;-)