1.得到一个随机的整数n,创建n个子线程对象; 2.要求在子线程中把当前线程的名称作为元素添加一个集合中; java 3.当n个线程的名称都添加到集合中,遍历集合打印每个线程的名称;
时间: 2023-06-11 20:10:28 浏览: 88
以下是Java代码实现:
```java
import java.util.ArrayList;
import java.util.List;
public class ThreadDemo {
public static void main(String[] args) {
int n = (int)(Math.random() * 10) + 1; // 生成1~10的随机整数
List<Thread> threads = new ArrayList<>();
// 创建n个子线程对象并添加到集合中
for (int i = 0; i < n; i++) {
Thread thread = new Thread(() -> {
String threadName = Thread.currentThread().getName();
synchronized (threads) {
threads.add(Thread.currentThread());
System.out.println(threadName + " added to collection.");
threads.notifyAll();
}
});
thread.start();
}
// 等待所有线程的名称都添加到集合中
synchronized (threads) {
while (threads.size() < n) {
try {
threads.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
// 遍历集合打印每个线程的名称
System.out.println("All thread names:");
for (Thread thread : threads) {
System.out.println(thread.getName());
}
}
}
```
在上述代码中,我们首先生成了一个1~10的随机整数n,并创建了一个空的线程集合threads。然后,我们循环n次,每次创建一个新的子线程对象,并将其启动。在子线程中,我们获取当前线程的名称,并使用synchronized关键字将其添加到线程集合中。在添加完毕后,我们通知所有等待线程。
接下来,我们使用synchronized关键字等待所有线程的名称都添加到集合中。在等待期间,我们使用wait()方法使当前线程进入等待状态,直到其他线程调用notifyAll()方法唤醒它。最后,我们遍历线程集合,打印每个线程的名称。
注意,我们使用了线程同步机制来确保线程集合的线程安全性。如果不加同步,多个线程可能会同时修改线程集合,导致集合中的线程数量不正确或出现线程安全问题。
阅读全文