Java将值传递给新对象

时间:2013-02-05 17:53:38

标签: java

是否可以将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);
            }
        }
    });
}

此致

2 个答案:

答案 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修饰符的变量不会改变,因此可以在匿名类的实例中使用。