2013-02-05 132 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

謝謝。我忘了我可以使用嵌套類;) –