大概你建议对数组进行分区,并且只允许一个线程访问每个分区。这是一个没有问题的合理方法。
事实上,fork/join框架可以做到这一点,并且可能适用于你试图达到的目标。
例如查看java.util.concurrent.RecursiveAction的javadocs,其中显示了对数组进行分区以对其进行分类的示例。简而言之,该阵列被分区,直到分区大小低于阈值。然后每个后续分区再次分区(即递归)。
代码如下所示:
class SortTask extends RecursiveAction {
final long[] array; final int lo; final int hi;
SortTask(long[] array, int lo, int hi) {
this.array = array; this.lo = lo; this.hi = hi;
}
protected void compute() {
if (hi - lo < THRESHOLD)
sequentiallySort(array, lo, hi);
else {
int mid = (lo + hi) >>> 1;
invokeAll(new SortTask(array, lo, mid),
new SortTask(array, mid, hi));
merge(array, lo, hi);
}
}
}
是用什么办法去上班?你说你想“放松”同步,但听起来好像你会完全移除它。然后你会遇到所有已知的多线程代码没有同步的问题(线程覆盖彼此的工作等) – Thomas 2012-03-12 03:49:02