我试图找出,完成第一个线程完全比启动第二个线程后,完成第二个线程比启动第三个线程后,请帮帮我!!
这是我的代码:
public class wait {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("First Thread");
createtheard2();
}
public static void createtheard2() {
try {
System.out.println("Second Thread");
} catch(Exception error1) {
error1.printStackTrace();
}
createtheard3();
}
public static void createtheard3() {
try {
System.out.println("Third Thread");
} catch(Exception error1) {
error1.printStackTrace();
}
}
}
完成第一个线程后,比启动第二个线程,完成第二个线程后,比启动第三个线程,请帮帮我!谢谢!
答案 0 :(得分:2)
实施Runnable
public class ThreadDemo implements Runnable { public void run() { //Do this what you need } }
使用join等待线程完成。
Thread t1 = new Thread(new ThreadDemo()); // this will call run() function t1.start(); // waits for this thread to die t1.join(); Thread t2 = new Thread(new ThreadDemo()); // this will call run() function t2.start(); // waits for this thread to die t2.join();
来自http://docs.oracle.com/javase/tutorial/essential/concurrency/join.html
t.join()导致当前线程暂停执行直到t 线程终止。
在你的情况下,由join方法暂停调用线程将是主线程。
答案 1 :(得分:0)
我认为你需要的是如果任务1(你的术语中的线程)成功,运行task2 else等待task1。请考虑以下事项。
public class Process{
public static void runProcess1() {
boolean done = false;
do {
// make done=true after task1 is done
} while (done);
runProcess2();
}
public static void runProcess2() {
boolean done = false;
do {
// make done=true after task2 is done
} while (done);
runProcess3();
}
public static void main(String[] args) {
runProcess1();
}
}
答案 2 :(得分:0)
正如所指出的那样,在这种情况下使用线程没有意义,因为你正在顺序执行任务。
但是,可以使用SingleThreadExecutor
一次运行单个线程例如,你
ArrayList
将完成工作)ExecutorService.execute()
)Thread.join()
)tasks.remove(currentTask);
ExecutorService.shutdown()
)或者,您可以使用ExecutorService.invokeAll()
使用单个线程执行程序。
你甚至可以简单地在一个循环中直接运行任务,调用start()
,但是,我真的建议不要在没有必要的情况下使用并发。