1

我想在不同的线程中修改一个数组,让我解释一下。

我有一个包含对象数组的“父”线程,最初它是空的。我想用多线程实现的是一种填充这个数组的方法。例如,线程 1 将发出请求并填充位置 0-20,线程 2 21-40 等等。在 C 中这很容易,我只需传递指针并从那里开始工作。

由于java不允许它我不知道该怎么做。我不能从 run() 返回任何东西,也不能将它作为参数传递给线程构造函数,因为无法从上面的线程访问数组。我希望有人知道这样做的干净方法。

myclass 扩展线程并覆盖运行。

4

2 回答 2

2

没有理由扩展 Thread。线程是用于执行工作单元的资源,您不是在创建一种新类型的资源,而是在定义一个工作单元。只需实现runnable,然后你就可以定义自己的构造函数并传入Array。

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 回答