1.定义一个子任务类,实现Runnable接口: 1.1 定义一个ArrayList集合对象,用于存放子线程的名称; 1.2 定义一个变量,用来记录正在运行的线程个数; 1.3定义一个构造方法,把进程总数作为参数进来; 1.4 在构造方法中,给正在运行的线程个数赋值为线程总数; 1.5 重写Runnable接口的run方法 ; 1.6 使用同步代码块,保证同一时间只能向集合中添加一个线程名称; 1.7 正在运行的线程个数减1; 1.8 所有的线程运行结束后遍历集合,打印所有线程的名称; 2.定义一个测试类: 2.1 在main方法中使用Random得到一个1到10的随机数; 2.2 调用子任务类的构造方法创建子任务对象,把随机数传递给构造方法; 2.3 循环创建n的子线程对象,并开启子线程;
时间: 2023-06-11 14:10:29 浏览: 112
1. 子任务类的实现如下:
```java
import java.util.ArrayList;
public class SubTask implements Runnable {
private ArrayList<String> threadNames;
private int runningThreadCount;
public SubTask(int threadCount) {
threadNames = new ArrayList<>();
runningThreadCount = threadCount;
}
@Override
public void run() {
synchronized (threadNames) {
threadNames.add(Thread.currentThread().getName());
}
runningThreadCount--;
if (runningThreadCount == 0) {
System.out.println("All threads are finished:");
for (String threadName : threadNames) {
System.out.println(threadName);
}
}
}
}
```
2. 测试类的实现如下:
```java
import java.util.Random;
public class Test {
public static void main(String[] args) {
Random rand = new Random();
int n = rand.nextInt(10) + 1;
SubTask subTask = new SubTask(n);
for (int i = 0; i < n; i++) {
Thread thread = new Thread(subTask);
thread.start();
}
}
}
```
在测试类中,我们首先使用Random类得到一个1到10的随机数n,然后创建一个SubTask对象,把n传递给它的构造方法。接着,我们循环创建n个子线程对象,并开启它们。在SubTask类的run方法中,我们使用同步代码块,保证同一时间只能向集合中添加一个线程名称。如果所有的线程都运行结束,我们遍历集合,打印所有线程的名称。
阅读全文