有3个主题:主线程(main()运行的线程),Thread A
和Thread B
。
运营顺序:
Thread A
。Thread A
后Thread B
。Thread B
已启动。Thread B
后Thread A
。Thread A
已启动。如果对Thread B
的调用是在Thread A
的runnable中执行的LAST语句,Thread A
实例化并启动后会Thread B
终止吗?或者Thread B
是否会嵌套在Thread A
中,从而创建无限数量的嵌套线程?什么是默认行为以及如何完成NOT不创建无限数量的线程(我希望每个先前的线程在子节点存活时结束)。
Thread.join()
会导致线程等到子线程死掉,对吗?
如果这只是一般的不良做法,任何人都可以推荐基本上可以完成相同任务的替代方案吗?我需要一个函数,几秒钟后,调用另一个函数,然后与第一个函数同时运行。完成一些命令后,第一个函数将死亡。然后,第二个函数应在几秒钟后调用第一个函数的新实例。这个循环应该继续,直到被主线程中止(或直到程序退出)。
答案 0 :(得分:2)
您的问题包含答案:您将线程视为任务或“运行的功能”,而不是。线程执行任务,因此围绕可以创建其他任务的任务的想法设计代码。任务只是实现Runnable接口的对象,仅此而已。您可以使用他们需要的所有数据构建这些任务(或可运行对象),甚至包括对其他(父)任务的引用。
创建一个CachedThreadPool,每当任务准备好执行时,使用execute方法将任务转储到线程池中。
您需要考虑的一件事是程序关闭:您需要关闭ThreadPool才能正常关闭程序。您可以简单地调用shutdownNow,但您可能希望设置一种技术,使重要任务有机会完成然后关闭。这需要一些练习才能使其正确(例如,shutdownHooks并不容易),但从那时起,只要需要1个以上的线程,就可以重复使用它。