我想在不同的线程中修改一个数组,让我解释一下。
我有一个包含对象数组的“父”线程,最初它是空的。我想用多线程实现的是一种填充这个数组的方法。例如,线程 1 将发出请求并填充位置 0-20,线程 2 21-40 等等。在 C 中这很容易,我只需传递指针并从那里开始工作。
由于java不允许它我不知道该怎么做。我不能从 run() 返回任何东西,也不能将它作为参数传递给线程构造函数,因为无法从上面的线程访问数组。我希望有人知道这样做的干净方法。
myclass 扩展线程并覆盖运行。
我想在不同的线程中修改一个数组,让我解释一下。
我有一个包含对象数组的“父”线程,最初它是空的。我想用多线程实现的是一种填充这个数组的方法。例如,线程 1 将发出请求并填充位置 0-20,线程 2 21-40 等等。在 C 中这很容易,我只需传递指针并从那里开始工作。
由于java不允许它我不知道该怎么做。我不能从 run() 返回任何东西,也不能将它作为参数传递给线程构造函数,因为无法从上面的线程访问数组。我希望有人知道这样做的干净方法。
myclass 扩展线程并覆盖运行。
没有理由扩展 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));
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 几乎相同,除了不是传递指向起始数组元素的指针,而是传递整个数组以及要由该线程修改的数组下限和上限。