Java代码多线程,等待启动其他

时间:2013-07-25 15:15:56

标签: java

我试图找出,完成第一个线程完全比启动第二个线程后,完成第二个线程比启动第三个线程后,请帮帮我!!

这是我的代码:

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();
        }
    }
}

完成第一个线程后,比启动第二个线程,完成第二个线程后,比启动第三个线程,请帮帮我!谢谢!

3 个答案:

答案 0 :(得分:2)

  1. 实施Runnable

    public class ThreadDemo implements Runnable {  
           public void run() {
              //Do this what you need
           }
    }
  2. 使用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();
  3. 来自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

一次运行单个线程

例如,你

  1. 将您的主题添加到“待办事项列表”(ArrayList将完成工作)
  2. 安排任务(ExecutorService.execute()
  3. 等待计划任务完成(Thread.join()
  4. 从“待办事项列表”tasks.remove(currentTask);
  5. 中删除该主题
  6. 选择下一个任务,或者如果已完成,则转到步骤7
  7. 返回第2步
  8. 杀死ExecutorService(ExecutorService.shutdown()
  9. 或者,您可以使用ExecutorService.invokeAll()使用单个线程执行程序。

    你甚至可以简单地在一个循环中直接运行任务,调用start(),但是,我真的建议不要在没有必要的情况下使用并发。