用java代码遍历一个数组,如何实现主线程正向遍历,再新开一个线程反向遍历,每个线程遍历一半
时间: 2024-09-29 16:06:47 浏览: 0
在Java中,我们可以创建两个线程分别从数组的两端开始遍历。主线程负责正向遍历,而另一个线程负责反向遍历。为了确保每个线程只处理数组的一半,我们可以在创建线程之前先计算出这个界限。下面是一个简单的示例:
```java
import java.util.ArrayList;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ArrayTraversal {
private static final int ARRAY_SIZE = 10; // 你可以替换为你实际的数组长度
private ArrayList<Integer> array = new ArrayList<>(Arrays.asList(…)); // 你的数组
public void traverseArray() {
ExecutorService executor = Executors.newFixedThreadPool(2); // 创建固定大小的线程池
int halfSize = ARRAY_SIZE / 2;
Runnable forwardTask = () -> {
for (int i = 0; i < halfSize; i++) {
System.out.println("Forward Thread: " + array.get(i));
}
};
Runnable backwardTask = () -> {
for (int i = ARRAY_SIZE - 1; i >= halfSize; i--) {
System.out.println("Backward Thread: " + array.get(i));
}
};
executor.execute(forwardTask); // 提交正向任务
executor.execute(backwardTask); // 提交反向任务
executor.shutdown(); // 关闭线程池,等待所有任务完成
}
public static void main(String[] args) {
new ArrayTraversal().traverseArray();
}
}
```
在这个例子中,`forwardTask` 和 `backwardTask` 都实现了Runnable接口,然后提交给线程池。当主线程执行到这一步时,会新开一个线程并执行这两个任务。