import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* 使用ExecutorService实现线程池
* ExecutorService是java提供的用于管理线程池的接口
* 线程池的作用:控制线程数量,重用线程
*
* 线程池的概念:首先创建一些线程,他们的集合称为线程池,当服务器接受到一个客户请求后
* 就从线程池中取出一个空闲的线程为之服务,服务完后不关闭该线程。而是将该线程还回到线程池中
* 在线程池的编程模式下,任务是提交给整个线程池,而不是交给某个线程,线程池在拿到任务后,他就在内部
* 找有无空闲线程,再把任务交给内部某个空闲线程。
* 一个线程同时只能执行一个任务,但是可以同一向一个线程池交多个任务
*
*
*
*/
public class ExecutorServiceDemo {
public static void main(String[] args) {
/**
* Executors.newFixedThreadPool(int nThreads)
* 创建一个可重用固定线程集合的线程池,以共享的无界队列方式来运行这些线程
*/
ExecutorService threadPool=Executors.newFixedThreadPool(2);//新建线程池并初始化2个空线程
for(int i=0;i<5;i++) {//新建5个线程任务
Runnable r=new Runnable(){
public void run() {
Thread t=Thread.currentThread();
try {
System.out.println(t.getName()+":"+"正在运行任务..");
Thread.sleep(3000);
System.out.println(t.getName()+":"+"任务结束!");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
System.out.println(t.getName()+":"+"线程中断了");
}
}
};
//将任务指派给线程池
threadPool.execute(r);
System.out.println("指派了一个任务给线程池!");
}
// threadPool.shutdown();
threadPool.shutdownNow();
System.out.println("线程池结束了");
/**
* BlockingQueue是双缓冲队列
* 在多线程并发时,若需要使用队列,我们可以使用Queue,但是要解决一个问题就是同步,但同步操作会降低并发对Queue操作的效率
* BlockingQueue内部使用两条队列,可允许两个线程同时向队列一个做存储,一个做取出操作,在保证并发安全的同时提高了队列的存取效率
*/
}
}
java-ExecutorService实现线程池
最新推荐文章于 2024-07-17 17:53:30 发布