java.定义一个子任务类,实现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-14 16:02:46 浏览: 79
下面是代码实现:
子任务类:
```java
import java.util.ArrayList;
public class SubTask implements Runnable {
private ArrayList<String> threadNames;
private int runningThreadCount;
public SubTask(int threadCount) {
threadNames = new ArrayList<String>();
runningThreadCount = threadCount;
}
@Override
public void run() {
synchronized (threadNames) {
threadNames.add(Thread.currentThread().getName());
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
runningThreadCount--;
if (runningThreadCount == 0) {
for (String name : threadNames) {
System.out.println(name);
}
}
}
}
```
测试类:
```java
import java.util.Random;
public class Test {
public static void main(String[] args) {
Random random = new Random();
int threadCount = random.nextInt(10) + 1;
SubTask subTask = new SubTask(threadCount);
for (int i = 0; i < threadCount; i++) {
Thread thread = new Thread(subTask);
thread.start();
}
}
}
```
测试结果:
随机生成的线程数为 4 时,输出结果为:
```
Thread-0
Thread-1
Thread-2
Thread-3
```
随机生成的线程数为 8 时,输出结果为:
```
Thread-0
Thread-1
Thread-2
Thread-3
Thread-4
Thread-5
Thread-6
Thread-7
```
阅读全文