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

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

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

      线程池主要有两个作用:

       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 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+"结束任务执行!");

}

}








你可能感兴趣的:(线程池的简单介绍及代码实现)