是否可以将i的值传递给新的线程对象?
当前代码:
int cores = 4;
final int n = 10000;
static double sum = 0.0;
Thread[] threads = new Thread[cores];
for (int i = 0; i < cores; i++)
{
threads[i] = new Thread(new Runnable() {
public void run() {
for (int j = i * (n / cores); j < (i + 1) * N / P; j++) {
double x = (j + 0.5) * step;
sum += 4.0 / (1.0 + x * x);
}
}
});
}
此致
答案 0 :(得分:1)
创建自己的内部类,扩展Thread
,然后将您的值传递给该类的实例,无论您想要什么 - 构造函数,setter方法等。
这是使用构造函数的入门代码。
public class MyThread extends Thread
{
private int myI;
public MyThread(int i) { myI = i; }
@Override
public void run()
{
// Your code goes here, referencing the "myI" variable.
}
}
答案 1 :(得分:0)
解决问题的代码的最小变化是使用index
修饰符添加下面的final
变量:
for (int i = 0; i < cores; i++)
{
final int index = i; // put value of "i" into a final variable
threads[i] = new Thread(new Runnable() {
public void run() {
// use "index" instead of "i"
for (int j = index * (n / cores); j < (index + 1) * N / P; j++) {
double x = (j + 0.5) * step;
sum += 4.0 / (1.0 + x * x);
}
}
});
}
保证final
修饰符的变量不会改变,因此可以在匿名类的实例中使用。