持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情
探究newCacheThreadPool()创建为线程池
实现代码如下:
public class TheRunnable implements Runnable {
private String username;
public TheRunnable(String username){
super();
this.username=username;
}
@Override
public void run() {
try {
System.out.println(Thread.currentThread().getName() +" username= "+username+" 开始时间:"+System.currentTimeMillis());
Thread.sleep(2000);
System.out.println(Thread.currentThread().getName() +" username= "+username+" 结束时间:"+System.currentTimeMillis());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
运行类代码如下:
public class RunnableRun {
public static void main(String[] args) {
ExecutorService executorService = Executors.newCachedThreadPool();
for (int i = 0; i < 10 ; i++) {
executorService.execute(new TheRunnable(String.valueOf(i+1)));
}
}
}
运行结果如下:
pool-1-thread-1 username= 1 开始时间:1653877877299
pool-1-thread-2 username= 2 开始时间:1653877877299
pool-1-thread-3 username= 3 开始时间:1653877877300
pool-1-thread-4 username= 4 开始时间:1653877877300
pool-1-thread-5 username= 5 开始时间:1653877877300
pool-1-thread-6 username= 6 开始时间:1653877877301
pool-1-thread-7 username= 7 开始时间:1653877877301
pool-1-thread-8 username= 8 开始时间:1653877877301
pool-1-thread-9 username= 9 开始时间:1653877877301
pool-1-thread-10 username= 10 开始时间:1653877877301
pool-1-thread-1 username= 1 结束时间:1653877879306
pool-1-thread-2 username= 2 结束时间:1653877879306
pool-1-thread-10 username= 10 结束时间:1653877879308
pool-1-thread-9 username= 9 结束时间:1653877879308
pool-1-thread-8 username= 8 结束时间:1653877879308
pool-1-thread-7 username= 7 结束时间:1653877879308
pool-1-thread-6 username= 6 结束时间:1653877879308
pool-1-thread-3 username= 3 结束时间:1653877879308
pool-1-thread-4 username= 4 结束时间:1653877879308
pool-1-thread-5 username= 5 结束时间:1653877879308
从运行结果看出线程池对象创建时完全成功,线程池中创建了10个线程,但是还没达到线程池中线程对象可以复用的效果。
修改运行类代码如下:
public class RunnableRun {
public static void main(String[] args) {
ExecutorService executorService = Executors.newCachedThreadPool();
for (int i = 0; i < 5; i++) {
executorService.execute(new TheRunnable(String.valueOf(i+1)));
}
try {
Thread.sleep(3000);
System.out.println("");
for (int i = 0; i < 5 ; i++) {
executorService.execute(new TheRunnable(String.valueOf(i+1)));
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
运行结果如下:
pool-1-thread-1 username= 1 开始时间:1653878802585
pool-1-thread-3 username= 3 开始时间:1653878802586
pool-1-thread-2 username= 2 开始时间:1653878802586
pool-1-thread-4 username= 4 开始时间:1653878802587
pool-1-thread-5 username= 5 开始时间:1653878802587
pool-1-thread-3 username= 3 结束时间:1653878804587
pool-1-thread-1 username= 1 结束时间:1653878804588
pool-1-thread-2 username= 2 结束时间:1653878804602
pool-1-thread-5 username= 5 结束时间:1653878804602
pool-1-thread-4 username= 4 结束时间:1653878804602
pool-1-thread-2 username= 1 开始时间:1653878805594
pool-1-thread-4 username= 2 开始时间:1653878805594
pool-1-thread-5 username= 3 开始时间:1653878805594
pool-1-thread-1 username= 4 开始时间:1653878805594
pool-1-thread-3 username= 5 开始时间:1653878805595
pool-1-thread-1 username= 4 结束时间:1653878807604
pool-1-thread-5 username= 3 结束时间:1653878807605
pool-1-thread-3 username= 5 结束时间:1653878807604
pool-1-thread-4 username= 2 结束时间:1653878807606
pool-1-thread-2 username= 1 结束时间:1653878807606
从运行结果看出线程池中线程对象被复用了