MTT*_*MTT 4 java multithreading synchronization
我编写了一个线程,为了内存同步,我必须使用 Atomicinteger。这是我的代码:
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];
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题是 q 是 2D 数组 Xdisc(在主类中)的行索引,显然应该是整数,但在 NewClass 中,q 是 AtomicInteger。因此我得到了这个错误:
incompatible types
required: int
found: AtomicInteger
Run Code Online (Sandbox Code Playgroud)
在这一行
temp_X[s] = Xdisc[q][s];
Run Code Online (Sandbox Code Playgroud)
我什至尝试过
temp_X[s] = Xdisc[(int)q][s];
Run Code Online (Sandbox Code Playgroud)
并得到这个错误:
inconvertible types
Run Code Online (Sandbox Code Playgroud)
有没有办法将 AtomicInteger 转换为 int ?
如果您尝试在整个循环中使用相同的值,只需使用以下返回值incrementAndGet():
int index = q.incrementAndGet();
if (index >= Xdisc.length) {
break;
} // I'm assuming you meant there to be a brace here...
Integer[] temp_X;
temp_X = new Integer[Xdisc[0].length];
for (int s = 0; s < Xdisc[0].length; s++) {
temp_X[s] = Xdisc[index][s];
}
Run Code Online (Sandbox Code Playgroud)
如果您想要绝对最新值,请使用get()。
小智 6
请用:
AtomicInteger x = new AtomicInteger();
int result = x.intValue();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18043 次 |
| 最近记录: |