JDK 5.0新增 线程池
>ExecutorService
> 真正的线程池接口,常见子类ThreadPoolExecutor
> void execute(Runnable command): 执行任务/命令,没有返回值,一般用来执行Runnable
> <T>Future<T>submit(Callable<T>task): 执行任务,有返回值,一般用来执行Callable
> void shutdown(): 关闭常量池
>Executors
> Executors.newCachedThreadPool():创建一个可以根据需要创建新线程的线程池
> Executors.newFixedThreadPool():创建一个可以重用的固定线程数的线程池
> Executors.newSingleThreadExecutor():创建只有一个线程的线程池
> Executors.newScheduledThreadPool(n):创建一个线程池,它可安排在给定延迟后运行命令或者定期地执行
>提高响应速度(减少了创建新线程的时间)
>降低资源消耗,重复利用线程池中的线程,不需要每次都创建
>便于线程管理
>corePoolSize:核心池的大小
>maximumPoolSize:最大线程数
>keepAliveTime:线程没有任务时最多保持多少时间后会终止
>......
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* @Description:线程池
* @Version:V1.0
* @JDK-Version:1.8
* @SoftWare:IntelliJ-IDEA-2022.1
* @Author:Joe
* @CreateTime:2022/5/102206
*/
public class demo_06 {
public static void main(String[] args) {
ExecutorService service = Executors.newFixedThreadPool(10);
//execute方法只能用Runnable
service.execute(new NumberThread());
//适合使用Callable
service.submit(new NumberThread1());
//关闭线程池
service.shutdown();
}
}
class NumberThread implements Runnable{
@Override
public void run() {
for (int i = 0; i <= 100; i++) {
if (i%2 == 0){
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
}
}
class NumberThread1 implements Runnable{
@Override
public void run() {
for (int i = 0; i <= 100; i++) {
if (i%2 != 0){
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
}
}