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