创建一个线程池,线程池中的线程数量固定为本机 CPU 核数,要求通过线程池实现以下需求:
1 向此线程池中提交2个任务,每个任务依次执行以下操作:记录当前线程的启动时间,随机休眠2秒以内,打印当前线程名,返回当前线程名。
2 这两个任务不会立刻执行,而是等待一段时间(10s以内)后再执行。
3 本程序中,Main 线程会和线程池中处理这两个任务的子线程同时执行。在这两个子线程正在执行提交的任务的同时,Main 线程会尝试获取这两个线程的结果,如果这两个子线程还没执行完则提示“未完成”,否则提示“已完成”并打印线程的返回值。
package concurrent.myexecutor;
import java.util.concurrent.Callable;
public class ThreadTask implements Callable<String> {
private String tname;
public ThreadTask(String tname) {
this.tname = tname;
}
@Override
public String call() throws Exception {
// 获取当前线程的名字
String name = Thread.currentThread().getName();
long currentTimeMillis = System.currentTimeMillis();
System.out.println(name + " - 【" + tname + "】 启动时间:" + currentTimeMillis);
// 模拟线程执行...
Thread.sleep((long) Math.random() * 2000);
System.out.println(name + " - 【" + tname + "】 正在执行...");
return name + " - 【" + tname + "】";
}
}
package concurrent.myexecutor;
import java.util.ArrayList;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class TestPool {
public static void main(String[] args) throws Exception {
Future<String> result;
ScheduledExecutorService schedulPool = Executors.newScheduledThreadPool(4);
ArrayList<Future<String>> results = new ArrayList<>();
for (int i = 0; i < 2; i++) {
/*
* schedule(a,b,c)三个参数的含义:
* a:向线程池中提交的任务;
* b:该任务等待多长时间之后,才会被执行
* c:b的时间单位
*/
result = schedulPool.schedule(new ThreadTask("thread" + i), (int) (Math.random() * 10), TimeUnit.SECONDS);
// 存储各个线程的执行结果
results.add(result);
}
// 打印结果
for (Future<String> res : results) {
System.out.println(res.isDone() ? "已完成" : "未完成");
System.out.println("等待线程执行完毕后,返回的结果: " + res.get());
}
schedulPool.shutdown();
}
}
未完成
pool-1-thread-1 - 【thread0】 启动时间:1651928342584
pool-1-thread-1 - 【thread0】 正在执行...
等待线程执行完毕后,返回的结果: pool-1-thread-1 - 【thread0】
未完成
pool-1-thread-2 - 【thread1】 启动时间:1651928343579
pool-1-thread-2 - 【thread1】 正在执行...
等待线程执行完毕后,返回的结果: pool-1-thread-2 - 【thread1】
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/chengqiuming/article/details/124639424
内容来源于网络,如有侵权,请联系作者删除!