Java中的多线程

use*_*336 3 java multithreading

我有一个主要的方法,如:

A a = new A();
a.start();

B b = new B();
b.start();
Run Code Online (Sandbox Code Playgroud)

B处理a.start创建的文件,因此a.start()必须先完成.但是,a.start()运行一个多线程作业,在它完成之前执行b.start().

  1. 为什么启动a.start()的主线程在完成之前退出方法?
  2. 什么是确保b.start()在a.start()完成之前不启动的好方法?

谢谢!

Ger*_*ies 13

看起来您根本不需要在单独的线程中执行这些任务,但如果您真的想要,您可以执行以下操作:

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
Run Code Online (Sandbox Code Playgroud)

假设A和B是Thread的子类,不鼓励实现Runnable并使用新的Thread(Runnable).start().

更好的方法是使用Executor并让A和B实现Runnable(不扩展Thread).像这样:

ExecutorService ex = Executors.newSingleThreadExecutor();
ex.execute(new A());
ex.execute(new B());
Run Code Online (Sandbox Code Playgroud)

现在,A和B将在一个单独的线程上顺序执行.