线程池(线程池实现)
一、创建各种线程池
1.创建无限大小的线程池
package cn. mldn. demo;
import java.util. concurrent . ExecutorService;
import java.util. concurrent.Executors;
public class TestDemo {
public static void main(String[ ] args) throws Exception {
//现在创建了一个线程池的模型,但是里面现在没有线程
ExecutorServiceexecutorService =Executors .newCachedThreadPool();
for (int x=0; x< 10; x++) {
int index=x;//保存一下x的内容
executorService.submit(() -> {
System.out. print1n(Thread. currentThread().getName() + ".x =" + index);
};
}
执行
第二次执行
executorService. shutdown();//关闭线程池
}
}
ThreadSleep(200)延迟执行
2.创建单线线程池
ExecutorServiceexecutorService =Executors .newCachedThreadPool();
在这个步骤中,将newCachedThreadPool()
改为newSingleThreadExecutor
- 创建固定大小的线程池
ExecutorServiceexecutorService =Executors .newCachedThreadPool();
在这个步骤中,将Executors .newCachedThreadPool();改为Executors .newFixedThreadPool(3);
4.创建定时调度池
执行代码
package cn. mldn. demo;
import java.util. concurrent.Executors;
import java.util. concurrent . ExecutorService;
public class TestDemo {
public static void main(String[ ] args) throws Exception {
创建一个具备有三个线程大小的定时调度线程池
Scheduled ExecutorService executorService= Executors.newScheduledThreadPool(3);
for (int x=0; x< 10; x++) {
//Thread Sleep(200);
int index=x;//保存一下x的内容
executorService. ScheduledAtFixedRate(Command, initialDelay,period,unit)
}
Command=new Runnable
initialDelay几秒开始
Timeunit单位(可以选秒,天,时的单位)
executorService.scheduleAtFixedRate (new Runnable){
@Override
public void run() {
System. out . print1n Thread. current Thread().getName() + ".x ="+ index);
}
},3,2TimeUnit.Second);
//使用的是一个秒的单位,表示3秒后开始执行,而后每2秒开始执行一次
}
二、总结
线程池给我们开发者带来的唯一的好处是允许多个线程一组按照组的模式进行程序的处理,这样在某一个业务逻辑非常复杂的环境下,性能就会得到很好的提升