Java基础之线程池4月打卡day12
Java基础之线程池4月打卡day12
关于作者
-
作者介绍
🍓 博客主页:
🍓 简介:JAVA领域优质创作者🥇、一名在校大三学生🎓、在校期间参加各种省赛、国赛,斩获一系列荣誉🏆。
🍓 关注我:关注我学习资料、文档下载统统都有,每日定时更新文章,励志做一名JAVA资深程序猿👨💻。
线程池就是多个线程封装在一起操作。
1.1 线程池概念
在生活中经常遇见,今天开发一个项目需要20个人一起开发
-
这个活很大,有多少人要多少人
-
这个活很大,但是要求10个人
-
这个活很大,但只要求1个人做
追加一个并发访问的程序报:java.util.concurrent,对于此线程池的操作的核心类和接口就定义在之中。这里面有两个核心的接口:
-
普通的执行线程池定义:Interface ExecutorService
-
调度线程池:Interface ScheduledExecutorService
如果要进行线程池的创建一般使用Class Executors这个类
-
创建无法小限制的线程池:public static ExecutorService newCachedThreadPool()
-
创建固定大小的线程池:public static ExecutorService newFixedThreadPool(int nThreads)
-
单线程池:public static ExecutorService newSingleThreadExecutor()
-
创建定时调度池:public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize)
1.2 线程池的实现
创建无限大小的线程池
package com.day13.demo;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class PoolDemo1 {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
//创建了一个线程池的模型,但是后面没有线程
ExecutorService executorService = Executors.newCachedThreadPool();
for (int i = 0; i < 10; i++) {
int index = i;
Thread.sleep(200);
executorService.submit(()-> {
System.out.println(Thread.currentThread().getName() + ",i = " + index);
});
}
executorService.shutdown();
}
}
创建固定大小的线程池
package com.day13.demo;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class PoolDemo1 {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
//创建了一个线程池的模型,但是后面没有线程
ExecutorService executorService = Executors.newFixedThreadPool(3);
for (int i = 0; i < 10; i++) {
int index = i;
Thread.sleep(200);
executorService.submit(()-> {
System.out.println(Thread.currentThread().getName() + ",i = " + index);
});
}
executorService.shutdown();
}
}
创建我们的单线程线程池
package com.day13.demo;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class PoolDemo1 {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
//创建了一个线程池的模型,但是后面没有线程
ExecutorService executorService = Executors.newSingleThreadExecutor();
for (int i = 0; i < 10; i++) {
int index = i;
executorService.submit(()-> {
System.out.println(Thread.currentThread().getName() + ",i = " + index);
});
}
executorService.shutdown();
}
}
定时调度池
package com.day13.demo;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class PoolDemo1 {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
//创建了一哥具备有三个线程大小的定时调度池
ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1);
for (int i = 0; i < 10; i++) {
//Thread.sleep(200);
int index = i;
executorService.scheduleAtFixedRate(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println(Thread.currentThread().getName() + ",i = " + index);
}
}, 3, 2, TimeUnit.SECONDS);//使用的是一个秒的单位,表示3秒后开始执行,而后每过2秒执行一次
}
}
}
线程池给我们开发者带来唯一好处的就是允许多个线程按照组的模式进行程序的处理,这样在一个业务逻辑非常复杂的情况下,性能就会得到很好的提升。
# 后语
厂长写博客目的初衷很简单,希望大家在学习的过程中少走弯路,多学一些东西,对自己有帮助的留下你的赞赞👍或者关注➕都是对我最大的支持,你的关注和点赞给厂长每天更文的动力。
对文章其中一部分不理解,都可以评论区回复我,我们来一起讨论,共同学习,一起进步!
- 点赞
- 收藏
- 关注作者
评论(0)