,如果你想訪問內部類中的值,你應該使用final int[] dim
。
public class RunManager {
public void runManager(int delay, final Context context) {
for (final int dim[] = {7}; dim[1] < 227; dim[1]++) {
Runnable r = new Runnable() {
@Override
public void run() {
RandomKernels randomKernels = new RandomKernels();
try {
randomKernels.foo(context, dim[1]);
} catch (InterruptedException e) {
Log.e(tag, e.getMessage());
}
}
};
Thread cnnThread = new Thread(r);
cnnThread.start();
try {
Thread.sleep(delay);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
選擇2 - 使用字段:
public class RunManager {
private int _dim;
public void runManager(int delay, final Context context) {
for (int dim = 7; dim < 227; dim++) {
_dim = dim;
Runnable r = new Runnable() {
@Override
public void run() {
RandomKernels randomKernels = new RandomKernels();
try {
randomKernels.foo(context, _dim);
} catch (InterruptedException e) {
Log.e(tag, e.getMessage());
}
}
};
Thread cnnThread = new Thread(r);
cnnThread.start();
try {
Thread.sleep(delay);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
選項3 - 迭代在另一種方法中,並添加作爲final int dim
方法參數:
private void createThreads(int delay, final Object context) {
for (int dim = 7; dim < 227; dim++) {
runManager(delay, context, dim);
}
}
public void runManager(int delay, final Context context, final int dim) {
Runnable r = new Runnable() {
@Override
public void run() {
RandomKernels randomKernels = new RandomKernels();
try {
randomKernels.foo(context, dim);
} catch (InterruptedException e) {
Log.e(tag, e.getMessage());
}
}
};
Thread cnnThread = new Thread(r);
cnnThread.start();
try {
Thread.sleep(delay);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
選項4 - 使用定製可運行的。您可以按照@BMacedo推薦的方式實現類,或者在內部類中創建抽象類並實現邏輯。
public class RunManager {
public void runManager(int delay, final Context context) {
for (int dim = 7; dim < 227; dim++) {
CustomRunnable r = new CustomRunnable() {
private int _dim;
@Override
public void run() {
RandomKernels randomKernels = new RandomKernels();
try {
randomKernels.foo(context, _dim);
} catch (InterruptedException e) {
Log.e(tag, e.getMessage());
}
}
public void setDim(int dim) {
_dim = dim;
}
};
r.setDim(dim);
Thread cnnThread = new Thread(r);
cnnThread.start();
try {
Thread.sleep(delay);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
abstract class CustomRunnable implements Runnable {
public abstract void setDim(int dim);
}
}
你真的想創造220個不同的線程嗎? – BMacedo
@BMacedo感謝您的快速響應。是的,每個線程在5 ms後完成其計算。我正在嘗試執行模擬工作負載來監視硬件特性。 – MTMD