List<String> list = new ArrayList<>();
比如定时任务执行一个计算,然后我开子线程A和B,A和B可以把数据都放在同一个变量里面,比如上面的list
当A执行完成了通知主程序,主程序计数器加1
当B执行完成了通知主程序,主程序计数器加1
如果计数器为2,主程序知道所有子线程都执行完毕了,那么开始处理list里面的数据
主程序和A、B三者需要变量共享,但是不能被并发的程序污染变量
不知道用ThreadLocal和volatile可以实现吗?
List<String> list = new ArrayList<>();
比如定时任务执行一个计算,然后我开子线程A和B,A和B可以把数据都放在同一个变量里面,比如上面的list
当A执行完成了通知主程序,主程序计数器加1
当B执行完成了通知主程序,主程序计数器加1
如果计数器为2,主程序知道所有子线程都执行完毕了,那么开始处理list里面的数据
主程序和A、B三者需要变量共享,但是不能被并发的程序污染变量
不知道用ThreadLocal和volatile可以实现吗?
计数器就用CountDownLatch
可以使用Vector来替代ArrayList
变量共享感觉这个随便建一个单例类、静态变量啥的都可以实现
至于这个被污染就要靠你的程序进行处理了 因为要看你共享的变量怎么设置的
8 回答6.4k 阅读
1 回答4.2k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
2 回答3.2k 阅读
2 回答3.9k 阅读
1 回答2.2k 阅读✓ 已解决
3 回答1.7k 阅读✓ 已解决
看下这个吧,
CompletableFuture.allOf
。如果你想单独控制的话,
CountDownLatch
也可以。另外
ArrayList
非线程安全,用CopyOnWriteArrayList
吧(不过这个在并发读
和删除
时可能会发生数组越界异常)。