如何在多个线程执行完后再执行某个方法

零起跑线 2011-05-19 12:03:24
问题描述

有一个方法
public boolean Login(){

Thread t1 = new Thread();
Thread t2 = new Thread();

t1.start();
t2.start();

return true;
}
如何在t1,t2运行结束后,再执行return true;这句
...全文
706 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
零起跑线 2011-05-20
  • 打赏
  • 举报
回复
刚测了一下,这个是正确的,是我理解错了
[Quote=引用 9 楼 keeya0416 的回复:]
Java code

public boolean Login() {

Thread t1 = new Thread();
Thread t2 = new Thread();

t1.start();
t2.start();

try {
t1.join();
……
[/Quote]
零起跑线 2011-05-20
  • 打赏
  • 举报
回复
我感觉这里有等待t1线程结束,然后执行t2线程,最后执行return true,那要多线程有何用?
[Quote=引用 9 楼 keeya0416 的回复:]
Java code

public boolean Login() {

Thread t1 = new Thread();
Thread t2 = new Thread();

t1.start();
t2.start();

try {
t1.join();
……
[/Quote]
keeya0416 2011-05-19
  • 打赏
  • 举报
回复

public boolean Login() {

Thread t1 = new Thread();
Thread t2 = new Thread();

t1.start();
t2.start();

try {
t1.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
t2.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return true;
}
JaredJared 2011-05-19
  • 打赏
  • 举报
回复
final CountDownLatch latch = new CountDownLatch(threadSize);

线程在执行完后调用latch.countDown();
public void run() {
xxxxxxx
latch.countDown();
}
//主线程等待
try {
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
return true;
zhu6100441 2011-05-19
  • 打赏
  • 举报
回复
其实一直没搞懂,join方法是拿来干什么的,求解释帝。
chosen0ne 2011-05-19
  • 打赏
  • 举报
回复
可以用CyclicBarrier,它可以并行执行一组任务,然后再进行下一个步骤之前等待,直到所有任务都完成。


CyclicBarrier barrier=new CyclicBarrier(n, new Runnable(){//n表示有几个线程
public void run(){
//所有线程执行完,然后进行处理
}
});



其它的线程在运行完自己的任务后,要调用barrier.await(),如果还有未完成的线程,则这个线程会阻塞;否则,所有的线程的任务执行完毕,会执行传入CyclicBarrier中的Runnable的run方法
mtv0199 2011-05-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 blvyoucan 的回复:]

我把你的方法变通了一下
Java code

public boolean login(){
Thread t1 = new Thread();
Thread t2 = new Thread();
t1.start();
t2.start();
while(t1.isAlive() || t2.isAlive()){

}
return true;
}


引用……
[/Quote]
零起跑线 2011-05-19
  • 打赏
  • 举报
回复
我把你的方法变通了一下

public boolean login(){
Thread t1 = new Thread();
Thread t2 = new Thread();
t1.start();
t2.start();
while(t1.isAlive() || t2.isAlive()){

}
return true;
}

[Quote=引用 1 楼 mtv0199 的回复:]
boolean t1End = t2End = false;

......


while(t1End && t2End){
}
return true;

线程里面改变值
[/Quote]
SantaRosa 2011-05-19
  • 打赏
  • 举报
回复
如果你Login这个方法也是在某个线程里,那么可以用资源锁的方式,await(),notify(),用这种方法,例子网上有的事。
如果不是的话,那么只能用1楼的方法了,不过要注意,要写一个synchronized方法来设置t1End和t2End,而不是直接取值。
零起跑线 2011-05-19
  • 打赏
  • 举报
回复
这个方法可行,不知道有没有其他方法
[Quote=引用楼主 blvyoucan 的回复:]
问题描述

Java code

有一个方法
public boolean Login(){

Thread t1 = new Thread();
Thread t2 = new Thread();

t1.start();
t2.start();

return true;
}
如何在t1,t2运行结束后,再执行return……
[/Quote]
mtv0199 2011-05-19
  • 打赏
  • 举报
回复
boolean t1End = t2End = false;

......


while(t1End && t2End){
}
return true;

线程里面改变值
小灰狼 2011-05-19
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 keeya0416 的回复:]
Java code

public boolean Login() {

Thread t1 = new Thread();
Thread t2 = new Thread();

t1.start();
t2.start();

try {
t1.join();
……
[/Quote]

+1

楼主,还有楼上几位菜鸟看看人家的这段代码吧
Thread.join() 方法干的就是楼主的这个工作
wula0010 2011-05-19
  • 打赏
  • 举报
回复

public boolean Login(){

Thread t1 = new Thread();
Thread t2 = new Thread();

t1.start();
t2.start();

boolean isRuning = true;
while (isRuning) {
if (t1.isAlive() || t2.isAlive()) {
isRuning = true;
}else {
isRuning = false;
}
}

return true;
}
lliiqiang 2011-05-19
  • 打赏
  • 举报
回复
可以设置两个static的boolean变量.一开始为false
两个线程结束时分别令其一个为true,主线程循环等待两个都是true时退出

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧