【发布时间】:2015-03-05 02:14:22
【问题描述】:
我有一个将启动其他线程的主线程。那些其他线程将要求完成作业,而主线程将使作业可供其他线程查看和执行。
必须完成的工作是将一个巨大的布尔数组中的索引设置为真。它们默认为假,其他线程只能将它们设置为真,从不假。各种作业可能涉及将相同的索引设置为 true。
主线程根据两件事找到新工作。
- 巨大的布尔数组中的值。
- 哪些工作已经完成。
如何确保主线程从庞大的布尔数组中读取新值?
我不能通过同步方法更新数组,因为这几乎是所有其他线程所做的,因此我只能获得相当多的顺序性能。
假设其他线程通过非同步函数将许多索引设置为 true 来更新巨大的布尔数组。如何确保主线程读取更新并确保它不只是本地缓存在线程中?有没有办法让它“推送”更新?我猜主线程应该只使用同步方法来“获取”更新?
【问题讨论】:
标签: java multithreading caching