【发布时间】:2013-11-27 17:59:40
【问题描述】:
我写了一个线程,为了内存同步,我必须使用 Atomcinteger。这是我的代码:
public class NewClass implements Runnable {
public double rr;
public double rmse_new;
public double rmse_newT;
private int k;
private int[][] Xdisc;
public NewClass(int Xdisc[][], double[][] pat_cand, int k, double[][] Yresid, double[][] Xresid) {
this.k = k;
this.Xdisc = Xdisc;
}
@Override
public void run() {
final AtomicInteger q = new AtomicInteger(0);
q.set(0);
while (true) {
if (q.incrementAndGet() >= Xdisc.length) {
break;
Integer[] temp_X;
temp_X = new Integer[Xdisc[0].length];
for (int s = 0; s < Xdisc[0].length; s++) {
temp_X[s] = Xdisc[q][s];
}
}
}
}
}
问题是 q 是二维数组 Xdisc(在主类中)的行索引,显然应该是整数,但在 NewClass 中,q 是 AtomicInteger。因此我得到了这个错误:
incompatible types
required: int
found: AtomicInteger
在这一行
temp_X[s] = Xdisc[q][s];
我什至尝试过
temp_X[s] = Xdisc[(int)q][s];
得到了这个错误:
inconvertible types
是否有将 AtomicInteger 转换为 int 的方法?
【问题讨论】:
-
无论如何,您的代码目前已损坏,因为您在
break语句之后获得了代码 - 这是无法访问的。当代码以与他的问题无关的方式被破坏时,很难建议工作代码。 -
使用 AtomicInteger.get() (docs.oracle.com/javase/6/docs/api/java/util/concurrent/atomic/…)
-
看起来你不需要在这里使用原子......你只在单个线程中使用它。原子类和 volatile 用于线程之间共享的值。
标签: java multithreading synchronization