小编Ast*_*hor的帖子

使用线程更改数组中数据的有效方法

我一直试图找出最有效的方法,许多线程在位级上改变一个非常大的字节数组.为了便于解释,我将围绕一个多线程的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)

java arrays multithreading bytearray

2
推荐指数
1
解决办法
167
查看次数

标签 统计

arrays ×1

bytearray ×1

java ×1

multithreading ×1