java让一个线程启动另一个线程,然后死亡
有3个线程:主线程(Main()在其上运行的线程)、Thread A
和Thread B
操作顺序:
- 程序启动(main())
- 主线程实例化并启动
Thread A
李> Thread A
在X秒后实例化Thread B
李>Thread B
已启动李>Thread B
在X秒后实例化Thread A
李>Thread A
已启动李>
如果对Thread B
的调用是在Thread A
的可运行状态中执行的最后一条语句,那么Thread A
会在Thread B
实例化并启动后终止吗?或者将Thread B
嵌套在Thread A
中,从而创建无限多的嵌套线程?默认行为是什么?我将如何实现不创建无限多个线程(我希望在子线程存活时结束之前的每个线程)
Thread.join()
会导致线程等待子线程死亡,对吗
如果这只是一般的坏习惯,有人能推荐基本上能完成相同任务的替代方案吗?我需要一个函数,在几秒钟后调用另一个函数,该函数将与第一个函数同时运行。在完成一些命令后,第一个函数将消失。然后,第二个函数应在几秒钟后调用第一个函数的新实例。此循环应继续,直到主线程中止(或直到程序退出)
# 1 楼答案
你的问题包含了答案:你认为线程是任务或“要运行的函数”,而它们不是。线程执行任务,所以围绕可以创建其他任务的任务设计代码。任务只是实现Runnable接口的对象,仅此而已。您可以使用这些任务(或可运行对象)所需的所有数据构造它们,甚至包括对其他(父)任务的引用。
你需要考虑的是程序关机:为了关闭程序,你需要关闭线程池。你可以简单地调用shutdownNow,但你可能想使用一种技术,让重要任务有机会完成,然后关闭。这需要一些练习才能正确使用(例如,shutdownHooks并不容易),但从那时起,只要需要超过1个线程,就可以重复使用它创建一个CachedThreadPool,每当任务准备好执行时,使用execute方法将任务转储到线程池中