1.记录者添加运行线程数量
public class DataRecoder {
public static int[] DATA = {1, 2, 3, 4, 5};
/**
*
@Fields RUNTHREADNUM : 当前跑起的子线程数量
*/
public static int RUNTHREADNUM = 0;
}
2. 执行任务时设置运行数量
public class RunTask {
public static void main(String[] args) {
for (int i=0; i<DataRecoder.DATA.length; i++) {
new Thread(new AddTask(i)).start();
// 一个线程运行,改变运行数量
DataRecoder.RUNTHREADNUM++;
}
while (0 < DataRecoder.RUNTHREADNUM) {
// System.out.println(DataRecoder.RUNTHREADNUM + "个子线程正在运行,请等待");
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("所有子线程执行完毕,程序结束");
}
}
3.任务执行的核心逻辑中在任务结束时减少运行线程数量
public class AddTask implements Runnable{
/**
* @Fields index : 需要计算的数组下标
*/
private int index = -1;
public AddTask(int index) {
this.index = index;
}
/* (non-Javadoc)
*
@see java.lang.Runnable#run()
*/
@Override
public void run() {
if (-1 == index) {
System.out.println("下标错误!");
return;
}
// 赋初始值
int sum = DataRecoder.DATA[index];
// 统计计算次数
int count = 1;
/*
* 只计算10次
*/
while (count < 10) {
// 自增计算
sum += DataRecoder.DATA[index];
System.out.println("线程" + Thread.currentThread().getId()
+ "\t参与计算的数为" + DataRecoder.DATA[index]
+ "\t第" + (count++) + "次计算的结果是:" + sum);
// 休息一会
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("计算任务执行完毕:" + index);
// 通知记录 运行数量改变
DataRecoder.RUNTHREADNUM--;
}
}