首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何锁定和同步更新primes[]和total?

如何锁定和同步更新primes[]和total?
EN

Stack Overflow用户
提问于 2014-02-02 23:47:11
回答 1查看 35关注 0票数 0

我试图让start,N final,然后初始化它们,然后使用lock作为primestotal,total,但是Netbeans一直显示错误,start,N未初始化,那么问题是如何初始化final变量?(也有main方法,但我没有张贴来保持问题简短)

代码语言:javascript
复制
public class PrimeBuggy implements Runnable {
//private static int start, N;
//I changed above line to following:
private final int start,N;
private static int numThreads;
private static int primes[];
private static boolean pflag[];
private static int total = 0;
//I created a lock
private Lock lock();
this.start = start;
this.N = N;
private static boolean is_prime(int v) {
    int i;
    int bound = (int)Math.floor(Math.sqrt((double)v)) + 1;
    for (i = 2; i < bound; i++) {
        if (pflag[i])
            continue;
        if (v % i == 0) {
            pflag[v] = true;
            return false;
        }
    }
    return (v > 1);
}    

/***/
private int threadNum;
private PrimeBuggy(int threadNum) { this.threadNum = threadNum; }
public void run() {
    int i;
    //lock this begining
    lock.lock();
    start = N/numThreads * threadNum;
    N = start + N/numThreads;
    for (i = start; i < N; i++) {
        if (is_prime(i)) {
            primes[total] = i;
            total++;
            //unlock at the end
            lock.unlock();
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2014-02-02 23:59:21

如果字段是final,则必须在声明时或使用构造函数对其进行初始化:

代码语言:javascript
复制
   private final int N =10;

   private PrimeBuggy(int threadNum) {

       start = N/numThreads * threadNum;
       this.threadNum = threadNum;
   }

然而,在您的代码中,methid中有几个初始化:

代码语言:javascript
复制
    start = N/numThreads * threadNum;
    N = start + N/numThreads;

这是完全没有意义的:

代码语言:javascript
复制
    //I created a lock
    private Lock lock();
    this.start = start;
    this.N = N;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21512550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档