线程池的简单介绍及代码实现

线程池能有效控制运行的线程数量,避免大量创建销毁线程带来的性能损耗,防止系统因创建过多线程而崩溃。通过ExecutorService接口和Executors工具类可以创建并管理线程池。例如,newFixedThreadPool方法用于创建固定大小的线程池,然后通过execute方法提交任务给线程池执行。
摘要由CSDN通过智能技术生成

      若是有大量任务需要请求访问服务器,那么需要为每一个任务创建一个线程,会创建大量的线程,在程序结束以后会将线程全部销毁。

      频繁的创建线程,或者创建过多的线程都会给系统带来风险,轻则拖慢系统,出现卡顿现象,严重的话可能出现内存溢出系统瘫痪,因为我们在创建并发量大得业务逻辑时,常常使用线程池来管理和调度线程。

      线程池主要有两个作用:

       1.控制线程数量(避免大量的线程导致系统崩溃)

        2.重用线程(避免频繁创建销毁线程)

     线程池的概念:首先呢创建一些线程,它们的集合称之为线程池,当服务器接收到一个客户请求后,就从线程池中取出一个空闲的线程为之服务,服务完了后不关闭线程,而是将该线程还回线程池中。     

      在线程池的编程模式下,任务是提交给整个线程池,而不是直接交给某个线程,线程池在拿到任务后,它就在内部找有无空闲的线程,再把任务交给内部某个空闲的线程,

        一个线程只能执行一个任务,但我们可以同时向一个线程池提交多个任务

       

      实现:ExecutorService接口

       线程池对象的创建:

          Executors.newFixedThreadPool(int nThreads):ExecutorService

          将任务提交给线程池

         Execute(Runnable)

public class ThreadPoolDemo {

public static void main(String[] args) {

//创建线程池对象

ExecutorService service =

Executors.newFixedThreadPool(3);

//将任务提交给线程池

for(int i=0;i<5;i++){

Task task = new Task();

service.execute(task);

}

//关闭线程池

//service.shutdown();

List<Runnable> list = service.shutdownNow();

System.out.println(list.size());

}

 

}

 

class Task implements Runnable{

 

@Override

public void run() {

String name = Thread.currentThread().getName();

System.out.println(name+"开始执行任务。。。");

try {

Thread.sleep(3000);

} catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println(name+"结束任务执行!");

}

}








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值