0

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

よろしく

4

2 に答える 2

1

を拡張する独自の内部クラスを作成Threadし、コンストラクター、セッター メソッドなど、必要に応じてそのクラスのインスタンスに値を渡します。

コンストラクターを使用したスターター コードを次に示します。

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.
   }
}
于 2013-02-05T17:55:54.917 に答える
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変更されないことが保証されているため、匿名クラスのインスタンスで使用できます。

于 2013-02-05T17:59:40.850 に答える