Java中的多线程

时间:2011-01-20 11:08:00

标签: java multithreading

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

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

B b = new B();
b.start();

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

  1. 如何启动a.start()的主线程在方法完成之前退出该方法?
  2. 确保b.start()在a.start()完成之前没有启动的好方法是什么?
  3. 谢谢!

2 个答案:

答案 0 :(得分: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

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

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

ExecutorService ex = Executors.newSingleThreadExecutor();
ex.execute(new A());
ex.execute(new B());

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

答案 1 :(得分:1)

不要直接使用线程,请选择更高级别的java.util.concurrent