1.定义一个子任务类,实现Runnable接口: 1.1 定义一个ArrayList集合对象,用于存放子线程的名称; 1.2 定义一个变量,用来记录正在运行的线程个数; 1.3定义一个构造方法,把进程总数作为参数进来; 1.4 在构造方法中,给正在运行的线程个数赋值为线程总数; 1.5 重写Runnable接口的run方法 ; 1.6 使用同步代码块,保证同一时间只能向集合中添加一个线程名称; 1.7 正在运行的线程个数减1; 1.8 所有的线程运行结束后遍历集合,打印所有线程的名称;
时间: 2023-06-14 16:03:22 浏览: 99
以下是代码实现:
```
import java.util.ArrayList;
public class SubTask implements Runnable {
private ArrayList<String> threadNames; // 存放子线程名称的集合
private int runningThreads; // 正在运行的线程个数
public SubTask(int totalThreads) {
threadNames = new ArrayList<>();
runningThreads = totalThreads;
}
@Override
public void run() {
synchronized (threadNames) {
threadNames.add(Thread.currentThread().getName()); // 添加线程名称到集合中
}
System.out.println(Thread.currentThread().getName() + " is running.");
try {
Thread.sleep(1000); // 让线程休眠1秒模拟线程运行
} catch (InterruptedException e) {
e.printStackTrace();
}
runningThreads--; // 运行结束,正在运行的线程个数减1
if (runningThreads == 0) {
System.out.println("All threads have finished running.");
for (String name : threadNames) {
System.out.println(name);
}
}
}
}
```
在这个类中,我们定义了一个 ArrayList 集合对象 threadNames 来存放子线程的名称,一个变量 runningThreads 来记录正在运行的线程个数。
在构造方法中,我们把进程总数作为参数传入,然后给正在运行的线程个数赋值为线程总数。
重写了 Runnable 接口的 run 方法,在其中使用同步代码块来保证同一时间只能向集合中添加一个线程名称。在线程运行结束后,将正在运行的线程个数减1,如果正在运行的线程个数为0,那么就遍历集合,打印所有线程的名称。
阅读全文