2. 编写一个程序,开启3个线程,去读取数组中的资源,要求读取的数据不能重复 数组: public static int[] arr ={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30}; main方法格式: public class ReadArray{ public static void main(String[] args) { } }
时间: 2023-08-19 15:36:40 浏览: 42
JAVA中如何用线程读取一个文件里的数据.doc
好的,以下是一个可能的解决方案:
```
public class ReadArray {
private static int[] arr = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30};
private static boolean[] readFlags = new boolean[arr.length]; // 标记每个元素是否已被读取
public static void main(String[] args) {
Thread t1 = new Thread(new Reader(), "Thread 1");
Thread t2 = new Thread(new Reader(), "Thread 2");
Thread t3 = new Thread(new Reader(), "Thread 3");
t1.start();
t2.start();
t3.start();
}
private static class Reader implements Runnable {
private int currentIndex = 0; // 当前读取到的元素的下标
@Override
public void run() {
while (currentIndex < arr.length) {
synchronized (ReadArray.class) { // 加锁,保证多个线程不会同时读取同一个元素
if (!readFlags[currentIndex]) { // 如果当前元素还没被读取
System.out.println(Thread.currentThread().getName() + " read " + arr[currentIndex]);
readFlags[currentIndex] = true;
}
currentIndex++; // 继续读取下一个元素
}
}
}
}
}
```
这个程序使用了一个`readFlags`数组来标记每个元素是否已经被读取过,读取时先判断这个标记是否为`false`,如果是则读取该元素并将标记设为`true`。同时使用`synchronized`关键字确保多个线程不会同时读取同一个元素。每个线程拥有一个自己的`currentIndex`变量,用于记录当前读取到的元素下标,直到所有元素都被读取完毕。
阅读全文