我正在努力找出,在完成第一个线程后比开始第二个线程完全,在完成第二个螺纹后比开始第一个线程更,请帮帮我!!
这是我的代码:
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();
}
}
}
完成第一个线程后,比开始第二个线程,完成第二个螺纹后,比启动第三个线程,请帮帮我!!谢谢
-
实现可运行
公共类ThreadDemo实现了Runnable{public void run(){//你需要什么就做什么}}
-
使用联接等待线程完成。
线程t1=新线程(new ThreadDemo());//这将调用run()函数t1.start();//等待此线程终止t1.join();线程t2=新线程(new ThreadDemo());//这将调用run()函数t2.start();//等待此线程终止t2.join()
发件人http://docs.oracle.com/javase/tutorial/essential/concurrency/join.html
t.join()使当前线程暂停执行,直到线程终止。
在您的情况下,由联接方法暂停的调用线程将是主线程。
我认为您需要的是,如果任务1(用您的术语来说是线程)成功,则运行task2,否则等待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();
}
}
正如前面所指出的,在这种情况下使用线程是没有意义的,因为您是按顺序执行任务的。
然而,使用SingleThreadExecutor 一次可以运行一个线程
例如,您的
- 将您的线程添加到"待办事项列表"(
ArrayList
将完成此任务) - 安排任务(
ExecutorService.execute()
) - 等待计划任务完成(
Thread.join()
) - 从"待办事项列表"
tasks.remove(currentTask);
中删除线程 - 选择下一个任务,如果所有任务都已完成,则转到步骤7
- 返回步骤2
- 终止ExecutorService(
ExecutorService.shutdown()
)
或者,您可以使用ExecutorService.invokeAll()
,使用单个线程执行器。
您甚至可以直接在循环中运行任务,调用start()
,但是,我真的建议不要在不需要并发的情况下使用并发。