让一个线程启动另一个线程然后死掉

时间:2014-02-17 17:24:06

标签: java multithreading

有3个主题:主线程(main()运行的线程),Thread AThread B

运营顺序:

  • 程序开始(main())
  • 主线程实例化并启动Thread A
  • X秒实例化Thread A
  • Thread B
  • Thread B已启动。
  • X秒实例化Thread B
  • Thread A
  • Thread A已启动。

如果对Thread B的调用是在Thread A的runnable中执行的LAST语句,Thread A实例化并启动后会Thread B终止吗?或者Thread B是否会嵌套在Thread A中,从而创建无限数量的嵌套线程?什么是默认行为以及如何完成NOT不创建无限数量的线程(我希望每个先前的线程在子节点存活时结束)。

Thread.join()会导致线程等到子线程死掉,对吗?

如果这只是一般的不良做法,任何人都可以推荐基本上可以完成相同任务的替代方案吗?我需要一个函数,几秒钟后,调用另一个函数,然后与第一个函数同时运行。完成一些命令后,第一个函数将死亡。然后,第二个函数应在几秒钟后调用第一个函数的新实例。这个循环应该继续,直到被主线程中止(或直到​​程序退出)。

1 个答案:

答案 0 :(得分:2)

您的问题包含答案:您将线程视为任务或“运行的功能”,而不是。线程执行任务,因此围绕可以创建其他任务的任务的想法设计代码。任务只是实现Runnable接口的对象,仅此而已。您可以使用他们需要的所有数据构建这些任务(或可运行对象),甚至包括对其他(父)任务的引用。
创建一个CachedThreadPool,每当任务准备好执行时,使用execute方法将任务转储到线程池中。

您需要考虑的一件事是程序关闭:您需要关闭ThreadPool才能正常关闭程序。您可以简单地调用shutdownNow,但您可能希望设置一种技术,使重要任务有机会完成然后关闭。这需要一些练习才能使其正确(例如,shutdownHooks并不容易),但从那时起,只要需要1个以上的线程,就可以重复使用它。