如何在类中顺序执行两个线程

我正在研究java中的线程编程,我遇到了一个问题,我必须一个接一个地执行2个线程。 下面是简要抽象我的问题的代码片段。

class A{ //default execute method of this class String a="thread1"; String b="thread2"; public void execute(){ if(a=="thread1"){ CreateThread1 t1 = new CreateThread1(this); t1.call(); } else if(b=="thread2") { CreateThread1 t2 = new CreateThread1(this); t2.call(); } }//end of execute public void UpdateUI(){ try{ Display.getDefault.asyncExec(new Runnable(){ public void run(){ //ui update code here } }); } catch(SWTException e){ } } } Class CreateThread1{ private A object; public CreateThread1(A object){ this.object=object } public void call(){ Thread t = new Thread(this); t.start(); } public void run(){ //business logic here object.UpdateUI();//updates UI } } 

这里的A类是User Interface类,它显示了Thread任务的进度,在上面的代码中CreateThread1启动,CreateThread2也启动,即使CreateThread1没有被杀死,我希望只有在CreateThread1完成任务后才能触发CreateThread2。这可能吗? 有任何想法吗?

您可以使用大小为1的FixedThreadPool 。这将保证顺序执行。

 ExecutorService executor = Executors.newFixedThreadPool(1); executor.submit(runnable1); executor.submit(runnable2); executor.shutdown(); executor.awaitTermination(10, TimeUnit.SECONDS); //waits until both runnables have finished. 

编辑

ExecutorService在内部使用同步结构,因此您可以安全地假设runnable1将在runnable2之前运行。

Thread#join ,虽然我更喜欢使用java.util.concurrent包中的类。

我很快就读到了你的问题,但你可能需要的是join()你看过Java Concurrency Tutorial吗? http://docs.oracle.com/javase/tutorial/essential/concurrency/join.html

您可以将ThreadPoolExecutor与SynchronousQueue一起使用。 这在ThreadPoolExecutor的文档中有所描述。

我认为顺序运行线程的最简单方法是

 Thread1.run(); Thread2.run(); . . 

为什么在run()甚至不创建线程时使用start()