多线程--线程池

线程池是一个容纳多线程的容器,用于减少创建和销毁线程的开销,提高系统响应速度和线程管理。通过Executors的newFixedThreadPool方法创建线程池,然后提交Runnable任务,使用submit方法执行。当不再需要线程池时,应关闭它,否则可能导致RejectedExecutionException异常。
摘要由CSDN通过智能技术生成

一、线程介绍

1、线程池概念

其实就是一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反
复创建线程而消耗过多资源。

2、为什么需要线程池

在我们现在所学习的知识里面,一旦我们需要使用线程的时候我们就会去创建一一个线程,这样看上去非常
简便,但是就会有一个问题:
如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会
大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。那么有没有-种办法使得线程可以复用,就是
执行完一个任务, 并不被销毁,而是可以继续执行其他的任务?在Java中可以通过线程池来达到这样的效果。

二、线程池理解

image-20210818212912350

三、线程池的优势

1.降低资源消耗。减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务。
2.提高响应速度。 当任务到达时,任务可以不需要的等到线程创建就能立即执行。
3.提高线程的可管理性。可以根据系统的承受能力,调整线程池中工作线线程的数目,防止因为
消耗过多的内存,而把服务器累趴下(每个线程需要大约1MB内存,线程开的越多,消耗的内存
也就越大,最后死机)。

四、线程池构建步骤

➢1.创建线程池对象。(Executors)
public static ExecutorService newFixedThreadPool(int nThreads):创建一一个指定 现场数量的线程
池对象
➢2.创建Runnable接口子类对象。
实现Runnable接口,重写run方法;
➢3.提交Runnable接口子类对象。
调用线程池对象的submit方法来启动线程去执行任务: submit(Runnable子 类对象);
➢4.关闭线程池(一般不做)。
submit方法调用结束后,程序并不终止,是因为线程池控制了线程的关闭,将使用完的线程又归还到
了线程池中,shutdown(

五、基本使用

  • 线程池的基本使用
  • 1、使用线程池的工具类Executors里面所提供的静态方法newFixedThreadPool(int nThreads) 来构建一个
  • 指定线程数量的线程池对象;
  • 2、创建一个Runnable的子类,然后在run方法中写明你的任务逻辑代码;
  • 3、通过创建出来的ExecutorService对象中的submit方法来执行你所创建的Runnable子类;
  • 4、如果你确定不再使用线程池了,那么可以关闭它!
public class ThreadPoolDemo {
	public static void main(String[] args) {
		//1、使用线程池的工具类Executors里面所提供的静态方法newFixedThreadPool(int nThreads) 
		//来构建一个指定线程数量的线程池对象;
		ExecutorService es = Executors.newFixedThreadPool(2);
		//3、通过创建出来的ExecutorService对象中的submit方法来执行你所创建的Runnable子类;
		es.submit(new RunnableImp());
		es.submit(new RunnableImp());
		es.submit(new RunnableImp());
		//4、如果你确定不再使用线程池了,那么可以关闭它!
		es.shutdown();
		//5、如果你关闭了线程池,你还在使用线程池的话,会导致什么结果?
		es.submit(new RunnableImp());//RejectedExecutionException
	}
}
//2、创建一个Runnable的子类,然后在run方法中写明你的任务逻辑代码;
class RunnableImp implements Runnable{
	@Override
	public void run() {
		System.out.println(Thread.currentThread().getName()+":创建了一个新线程!");
		//加上一个业务逻辑的执行时间
		try {
			Thread.sleep(2000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值