线程并发wait()其他线程完成并继续其工作

时间:2012-02-06 22:43:41

标签: android multithreading java-ee concurrency wait

我想让一个线程等待另一个完成,而不是终止它,启动第二个并创建另一个firt线程的实例。它是这样做的吗?

Thread1 first = new Thread1();
first.start();
while(flag==true){//start while1
first.wait();
Thread2 second = new Thread2();
second.start();
while(second.isAlive()){
Toast toast = new Toast(...WORKING IN PROGRESS...);//just show something
}
flag = false;
}//end of while1

Thread会先等待,直到Thread第二个会停止运行吗?我只是希望Thread先暂停并在第二个线程完成运行后继续工作。谢谢你的帮助

3 个答案:

答案 0 :(得分:1)

我认为你正在寻找这样的东西:

class Worker implements Runnable{

    public void run(){
        int count = 0;
        while(true){
            Toast toast = new Toast(...WORKING IN PROGRESS...);//just show something
            count++;

            if(count == 10)
                break;
        }
    }
}

然后将runnable Worker传递给线程:

Thread first = new Thread(new Worker());
first.start();
first.join();// waits for the first thread to finish
Thread second = new Thread(new Worker());
second.start();

请注意,除非您开设名为WorkerWorker2的课程,否则这些课程将不存在。但是,没有理由执行一个线程,等待它完成然后执行另一个线程:它完全违背了并发的目的,你也可以顺序执行代码。

答案 1 :(得分:1)

假设您正在编写Java,可以使用Thread.join()方法强制某个线程等待另一个线程结束。例如,如果您希望线程1等到线程2完成:

Thread Thread2 = new SomethingImplementingThread();
Thread Thread1 = new Thread(new Runnable() {
                  public Thread waitforthisone;
                  public void run() {
                     try {
                     waitforthisone.join();
                     } catch (InterruptedException e) {}
                     // Do stuff once waitforthisone has finished
                  });

Thread1.waitforthisone = Thread2;
Thread2.start();
Thread1.start(); // When thread 1 starts it will run Thread 2's join function, and thus 
                 // wait for thread 2 to exit

注意:代码中的wait命令将导致线程运行(在这种情况下,无论是thread1还是线程2,还是创建它们的线程)wait()[第4行],即进入休眠状态。具体来说,如果另一个线程(thread1或thread2)调用first.notify(),则只能唤醒线程等待。您上面提到的代码将永远不会超过第4行。

答案 2 :(得分:0)

完全可以同步线程 - 我最喜欢的方法之一是使用CountdownLatch - 但是您的代码显示对如何使用它们缺乏了解。我建议在继续前进之前阅读一些关于Threads的内容。如果你做错了,线程和并发很容易搞砸。