2013-02-05 42 views
0

是否有可能将i的值传递给新线程对象?Java将值传递给新对象

当前代码:

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); 
      } 
     } 
    }); 
} 

问候

+1

不,但您可以将最终的int变量添加到您的Runnable并使用i初始化它。 – Ingo

回答

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修饰符保证不会改变,因此可以用于匿名类的实例。

+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. 
    } 
} 
+0

谢谢。我忘了我可以使用嵌套类;) –