我一直试图找出最有效的方法,许多线程在位级上改变一个非常大的字节数组.为了便于解释,我将围绕一个多线程的Eratosthenes筛子提出问题,以便于解释这个问题.虽然我不会完全完成代码,因为我将省略某些与之无直接关系的部分.筛子也不会完全优化,因为这不是直接的问题.筛子将以这样的方式工作,即它保存哪个值是字节数组中的素数,其中每个字节包含7个数字(由于所有被签名的东西,我们不能改变第一位).
让我们说我们的目标是找到低于1 000 000 000(10亿)的所有素数.因此,我们需要一个长度为1 000 000 000/7 +1或142 857 143(约1.43亿)的字节数组.
class Prime {
int max = 1000000000;
byte[] b = new byte[(max/7)+1];
Prime() {
for(int i = 0; i < b.length; i++) {
b[i] = (byte)127; //Setting all values to 1 at start
}
findPrimes();
}
/*
* Calling remove will set the bit value associated with the number
* to 0 signaling that isn't an prime
*/
void remove(int i) {
int j = i/7; //gets which array …Run Code Online (Sandbox Code Playgroud)