代码如下:
public class MulThreadTest {
public static void main(String[] args) {
final int a[] = new int[1024];
final Long begin = new Date().getTime();
for (int i = 0; i < 4; i++) {
//final int ii = i*64;
final int ii = i;
new Thread(new Runnable() {
public void run() {
for (int j = 0; j < 100000000; j++) {
a[ii] = a[ii]+3;
}
System.out.println(new Date().getTime() - begin);
}
}).start();
}
}
}
如果 ii = i*64;要990,而final int ii = i;要2427。
CPU缓存一般为分行。如果连续的数据块分别被多个行程处理,会导致缓存失效(多核CPU的缓存要一致)。
结论:
程序设计时,相邻数据尽量在同一线程里处理。