あなたは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