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

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

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

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

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

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

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

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

阅读 1.6k
2 个回答

看下这个吧,CompletableFuture.allOf


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

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

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题