java多线程的问题

梦幻女侠 发布于 2016/08/16 14:41
阅读 394
收藏 1
Java中多线程,如果有两个方法method1和method2,这两个方法中都有多线程处理业务,并且method2是在method1运行之后运行,那么如何保证method1中的所有的线程执行完毕呢
加载中
2
无愧于心-work
用countdownlatch线程辅助类
1
乌龟壳
乌龟壳

ConcurrentQueue

线程1结束时put

线程2开始时poll到线程1的结果再继续

0
华2淫雄
华2淫雄
我只想到join
梦幻女侠
梦幻女侠
我这种情况用join不行,我试过了
0
fenggf
fenggf

callable,future,future等待method1结束返回值(阻塞),再运行method2,

fenggf
fenggf
回复 @梦幻女侠 : 线程池拿到不能等待结果?实在不行你在两个method中间加个queue,method1跑完了放进queue,method2直接从queue里取
fenggf
fenggf
回复 @梦幻女侠 : 两个method处理的是同一样东西吗?只是有先后顺序?
梦幻女侠
梦幻女侠
method1中是线程池,如果等返回结果呢
0
随风溜达的向日葵
随风溜达的向日葵

虽然已经过去很久了,看到了就是缘分。

void method1(){
    CompletableFuture<String> future = new CompletableFuture<String>();
    method2(ret->{
        future.complete(ret);
    });
    final String runresult = future.get(5, TimeUnit.SECONDS);// 等待5秒
}
void method2(Consumer<String> consumer){
    CompletableFuture<Void> future1 = new CompletableFuture<Void>();
    CompletableFuture<Void> future2 = new CompletableFuture<Void>();
    new Thread(()->{// thread 1
        future1.complete(null);
    }).start();
    new Thread(()->{// thread 2
        future2.complete(null);
    }).start();
    CompletableFuture.allOf(future1, future2).whenComplete((value, ex)->{
        consumer.accept("Success");
    });
}

梦幻女侠
梦幻女侠
谢谢,已经解决,借助的FutureTask这个类
0
又出bug啦
又出bug啦

虽然已经过去很久了,看到了就是缘分。

CountDownLatch start = new CountDownLatch(1);

void method1(){

doing...

start.countDown();

}

void method2(){

start.await();

doing....

}

返回顶部
顶部