2011-01-20 125 views
3

我有一个main方法是这样的:多线程Java中

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

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

B工作对a.start产生如此a.start(文件)必须完成first.However, a.start ()运行多线程作业,并在执行之前执行b.start()。

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

谢谢!

+1

它来,因为JVM决定执行哪个线程,你无法预测它。加入和并发utils是最好的方式,因为它已经在下面指出。 – 2011-01-20 11:23:18

回答

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并使用新线程(Runnable).start()。

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

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

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

+0

+1想要多次投票。 ;) – 2011-01-20 11:49:52

+0

谢谢! 由于文本最小长度的原因,需要写东西... – user431336 2011-01-21 08:38:19