我试图让start,N final,然后初始化它们,然后使用lock作为primestotal,total,但是Netbeans一直显示错误,start,N未初始化,那么问题是如何初始化final变量?(也有main方法,但我没有张贴来保持问题简短)
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();
}
}
}发布于 2014-02-02 23:59:21
如果字段是final,则必须在声明时或使用构造函数对其进行初始化:
private final int N =10;
private PrimeBuggy(int threadNum) {
start = N/numThreads * threadNum;
this.threadNum = threadNum;
}然而,在您的代码中,methid中有几个初始化:
start = N/numThreads * threadNum;
N = start + N/numThreads;这是完全没有意义的:
//I created a lock
private Lock lock();
this.start = start;
this.N = N;https://stackoverflow.com/questions/21512550
复制相似问题