我有一个 main 方法,类似:
A a = new A();
a.start();
B b = new B();
b.start();
B 处理 a.start 创建的文件,因此 a.start() 必须先完成。但是, a.start() 运行多线程作业,并在完成之前执行 b.start()。
- 为什么启动 a.start() 的主线程在完成之前退出该方法?
- 有什么好方法可以确保 b.start() 不会在 a.start() 完成之前启动?
谢谢!
最佳答案
看起来你根本不需要在单独的线程中执行这些任务,但如果你真的想要,你可以这样做:
A a = new A();
a.start();
a.join(); // Will wait until thread A is done
B b = new B();
b.start();
b.join(); // Will wait until thread B is done
假设 A 和 B 是 Thread 的子类,不鼓励实现 Runnable 并使用 new Thread(Runnable).start()。
更好的方法是使用执行器并让 A 和 B 实现 Runnable(而不是扩展线程)。像这样:
ExecutorService ex = Executors.newSingleThreadExecutor();
ex.execute(new A());
ex.execute(new B());
A 和 B 现在将在单独的线程上顺序执行。
关于java - Java中的多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4746338/