1

異なるスレッド内で配列を変更したいので、説明させてください。

オブジェクトの配列を含む「親」スレッドがありますが、最初は空です。マルチスレッドで実装したいのは、この配列を埋める方法です。たとえば、スレッド 1 はリクエストを作成し、位置 0 ~ 20 を埋め、スレッド 2 は 21 ~ 40 などを埋めます。C ではこれは簡単です。ポインタを渡してそこから作業するだけです。

Javaはそれを許可していないので、私はそれを行う方法がわかりません. 上記のスレッドから配列にアクセスできないため、run() から何も返すことも、スレッド コンストラクターのパラメーターとして渡すこともできません。誰かがそうするためのきれいな方法を知っていることを願っています。

myclass はスレッドを拡張し、実行をオーバーライドします。

4

2 に答える 2

2

スレッドを拡張する理由はありません。スレッドは作業単位を実行するためのリソースです。新しいタイプのリソースを作成するのではなく、作業単位を定義しています。runnable を実装するだけで、独自のコンストラクターを定義して配列に渡すことができます。

public class ArrayPopulator implements Runnable {

  private Object[] array;
  private int minIndex;
  private int maxIndex;

  public ArrayPopulator(Object[] array, int minIndex, int maxIndex) {
    //assignments
  }

  public void run() {
    for (int i = minIndex; i <= maxIndex; i++) {
      //you get the idea
    }
  }
}


Thread thread1 = new Thread(new ArrayPopulator(array, 0, 19));
Thread thread1 = new Thread(new ArrayPopulator(array, 20, 39));
于 2013-04-12T17:07:57.577 に答える
1
public void fillPositions(int[] array, int lowerBound, int upperBound) {
    for(int i = lowerBound; i < upperBound; i++) { ... }
}

fillPositions(array, 0, 20);
fillPositions(array, 20, 40);

等々。C とほぼ同じですが、配列の開始要素へのポインターを渡す代わりに、そのスレッドで変更する配列の下限と上限と共に配列全体を渡します。

于 2013-04-12T17:07:28.110 に答える