java开2个子线程如何分别执行完成后通知主程序?

List<String> list = new ArrayList<>();

比如定时任务执行一个计算,然后我开子线程A和B,A和B可以把数据都放在同一个变量里面,比如上面的list

当A执行完成了通知主程序,主程序计数器加1

当B执行完成了通知主程序,主程序计数器加1

如果计数器为2,主程序知道所有子线程都执行完毕了,那么开始处理list里面的数据

主程序和A、B三者需要变量共享,但是不能被并发的程序污染变量

不知道用ThreadLocal和volatile可以实现吗?


回答:

看下这个吧,CompletableFuture.allOf


如果你想单独控制的话,CountDownLatch也可以。

另外ArrayList非线程安全,用CopyOnWriteArrayList吧(不过这个在并发删除时可能会发生数组越界异常)。


回答:

计数器就用CountDownLatch
可以使用Vector来替代ArrayList

变量共享感觉这个随便建一个单例类、静态变量啥的都可以实现
至于这个被污染就要靠你的程序进行处理了 因为要看你共享的变量怎么设置的

以上是 java开2个子线程如何分别执行完成后通知主程序? 的全部内容, 来源链接: utcz.com/p/944862.html

回到顶部