package cn.project.demo;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
public class ThreadPool {
public static void main(String[] args) throws Exception {
//创建无限大小的线程池
//分配不限个数线程去处理数据
ExecutorService executorService=Executors.newCachedThreadPool();
for (int i = 0; i < 20; i++) {
//Thread.sleep(200);可以通过休眠看问题,如果不加休眠,则要在同一时间处理数据,就会分配多个线程,加了后,由于有足够的时间处理,则只需要一个线程处理即可
int index=i; //这里需要注意,在使用下面的匿名方式时,需要将值赋予final关键字或者重新定义个变量存储,因为在匿名传入的时候已经被销毁了
executorService.execute(()->{
System.out.println(Thread.currentThread().getName()+" x="+index);
});
}
executorService.shutdown();
//创建单线程的线程池
//只分配一个线程去处理数据
ExecutorService singleService=Executors.newSingleThreadExecutor();
for (int i = 0; i < 20; i++) {
Thread.sleep(200);
int index=i; //这里需要注意,在使用下面的匿名方式时,需要将值赋予final关键字或者重新定义个变量存储,因为在匿名传入的时候已经被销毁了
singleService.execute(()->{
System.out.println(Thread.currentThread().getName()+" x="+index);
});
}
singleService.shutdown();
//创建固定数量的线程池
//指派固定个数线程去处理数据
ScheduledExecutorService scheduledExecutorService=Executors.newScheduledThreadPool(4);
for (int i = 0; i < 20; i++) {
//Thread.sleep(100);
int index=i; //这里需要注意,在使用下面的匿名方式时,需要将值赋予final关键字或者重新定义个变量存储,因为在匿名传入的时候已经被销毁了
scheduledExecutorService.execute(()->{
System.out.println(Thread.currentThread().getName()+" x="+index);
});
}
scheduledExecutorService.shutdown();
}
}