Java 一个线程依赖于另一个线程

Java 一个线程依赖于另一个线程,java,multithreading,daemon,Java,Multithreading,Daemon,如果4个线程正在运行,并且希望t1线程完成其指令并终止,并且希望t2也应该在t1终止后终止,即使其指令未完全完成,而t3和t4仍在运行,也就是说,它应该只依赖于t2,既不依赖于t3也不依赖于t4 有人建议我创建t2守护进程,但这会使t2依赖于t3和t4。任何人都可以用一个示例来帮助我如何做到这一点?您可以使用 它是允许一个或多个线程等待的同步辅助工具 直到在其他线程中执行的一组操作完成。CountDownLatch是一种通用的同步工具,可用于多种用途。倒计时 使用计数1初始化,用作简单的开/关闩

如果4个线程正在运行,并且希望t1线程完成其指令并终止,并且希望t2也应该在t1终止后终止,即使其指令未完全完成,而t3和t4仍在运行,也就是说,它应该只依赖于t2,既不依赖于t3也不依赖于t4

有人建议我创建t2守护进程,但这会使t2依赖于t3和t4。任何人都可以用一个示例来帮助我如何做到这一点?

您可以使用

它是允许一个或多个线程等待的同步辅助工具 直到在其他线程中执行的一组操作完成。CountDownLatch是一种通用的同步工具,可用于多种用途。倒计时 使用计数1初始化,用作简单的开/关闩锁,或 gate:所有调用的线程都在gate处等待,直到它被打开 由调用倒计时()的线程执行。初始化为N的倒计时锁存器 可用于使一个线程等待N个线程完成 某些操作,或某些操作已完成N次

代码片段-

CountDownLatch doneSignal = new CountDownLatch(1);
// Share the same object between two thread
Thread T1{
 public void run(){ 
  doneSignal.await(); //T1 will wait untill T2 finshed
  ...
 }
}
...
Thread T2{
 public void run(){ 
  ...
  doneSignal.countDown(); // sending signal that T2 is over
 }
}
您可以使用

它是允许一个或多个线程等待的同步辅助工具 直到在其他线程中执行的一组操作完成。CountDownLatch是一种通用的同步工具,可用于多种用途。倒计时 使用计数1初始化,用作简单的开/关闩锁,或 gate:所有调用的线程都在gate处等待,直到它被打开 由调用倒计时()的线程执行。初始化为N的倒计时锁存器 可用于使一个线程等待N个线程完成 某些操作,或某些操作已完成N次

代码片段-

CountDownLatch doneSignal = new CountDownLatch(1);
// Share the same object between two thread
Thread T1{
 public void run(){ 
  doneSignal.await(); //T1 will wait untill T2 finshed
  ...
 }
}
...
Thread T2{
 public void run(){ 
  ...
  doneSignal.countDown(); // sending signal that T2 is over
 }
}

使用a并在必要时取消它。

使用a并在必要时取消它。

盲目破坏线程是一件危险的事情

在java中,您可以做的最好的事情是t2并让它冒泡(根据需要进行手动检查),这样t2就可以自己清理

例如,在循环中,您可以执行以下操作:

if(Thread.interrupted())throw new InterruptedException();

定期在t2中(或者自定义
TimeoutException
,如果这是您避免选中的
interruptedeexception
)的风格,那么盲目破坏线程是一件危险的事情

在java中,您可以做的最好的事情是t2并让它冒泡(根据需要进行手动检查),这样t2就可以自己清理

例如,在循环中,您可以执行以下操作:

if(Thread.interrupted())throw new InterruptedException();

定期在t2中(或自定义
TimeoutException
,如果这是您避免选中的
interruptedeexception
)的风格,请确保这是可能的。阅读“”,那么
t1
还应该做什么?有什么吗?模糊的问题和许多可能的解决方案;例如,在
while
循环中有一个共享的
原子布尔
。您使用4个线程试图解决哪个问题?有可能有更简单的方法。这是在一次采访中问到的。当然有可能。阅读“”,那么
t1
还应该做什么?有什么吗?模糊的问题和许多可能的解决方案;例如,在
while
循环中有一个共享的
原子布尔
。您使用4个线程试图解决哪个问题?有可能有更简单的方法。这是在一次采访中问到的。