实现十个线程同时插入20个元素,另一个线程取数并打印200个元素java
时间: 2023-11-28 10:07:04 浏览: 108
Java实现多线程轮流打印1-100的数字操作
可以使用Java的多线程机制来实现这个需求。具体步骤如下:
1. 创建一个共享数据结构,比如一个ArrayList,用于存储元素。
2. 创建10个线程,每个线程执行以下操作:
- 生成20个随机数。
- 将这20个随机数插入到共享数据结构中。
3. 创建一个取数线程,执行以下操作:
- 循环200次。
- 从共享数据结构中取出一个元素,并打印出来。
4. 等待所有线程执行完毕。
下面是一个示例代码:
```java
import java.util.ArrayList;
import java.util.Random;
public class Main {
private static final int THREAD_NUM = 10;
private static final int ELEM_NUM = 20;
private static final int PRINT_NUM = 200;
private static final ArrayList<Integer> data = new ArrayList<>();
public static void main(String[] args) throws InterruptedException {
Thread[] threads = new Thread[THREAD_NUM];
for (int i = 0; i < THREAD_NUM; i++) {
threads[i] = new Thread(() -> {
Random rand = new Random();
for (int j = 0; j < ELEM_NUM; j++) {
int elem = rand.nextInt();
synchronized (data) {
data.add(elem);
}
}
});
threads[i].start();
}
Thread printThread = new Thread(() -> {
for (int i = 0; i < PRINT_NUM; i++) {
synchronized (data) {
if (data.size() > 0) {
int elem = data.remove(0);
System.out.println(elem);
}
}
}
});
printThread.start();
for (Thread thread : threads) {
thread.join();
}
printThread.join();
}
}
```
这个示例代码中,首先创建了一个共享数据结构`data`,然后创建了10个线程,每个线程生成20个随机数,并插入到`data`中。插入时需要使用`synchronized`关键字来保证线程安全。
接着创建了一个取数线程`printThread`,循环200次,每次从`data`中取出一个元素,并打印出来。取数时也需要使用`synchronized`关键字来保证线程安全。
最后,使用`join()`方法等待所有线程执行完毕。
阅读全文