我想让一个线程等待另一个完成,而不是终止它,启动第二个并创建另一个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先暂停并在第二个线程完成运行后继续工作。谢谢你的帮助
答案 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();
请注意,除非您开设名为Worker
和Worker2
的课程,否则这些课程将不存在。但是,没有理由执行一个线程,等待它完成然后执行另一个线程:它完全违背了并发的目的,你也可以顺序执行代码。
答案 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的内容。如果你做错了,线程和并发很容易搞砸。