Java线程池详解

目录

一、线程池的概念和原理

1、概述

2、线程池的概念

线程池:

3、线程池的底层原理

4、合理利用线程池能带来的好处:

二、线程池的代码实现

1、Executors线程池的工厂类(用来生产线程池)

生产线程池的静态方法:

2、ExecutorService线程池接口

用来从线程池中获取线程,调用start方法执行线程任务:

关闭/销毁线程池的方法:

3、线程池的使用步骤

4、代码演示

主方法:

Runnable接口实现类:

运行结果:


一、线程池的概念和原理

1、概述

如果并发的线程数量很多,而每个线程做的却是很简单的问题,这就大大降低了系统的效率;

那么是否有一个方法可以使线程得到复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他任务?

在java中可以通过线程池达到这个效果;

2、线程池的概念

线程池:

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

3、线程池的底层原理

 

4、合理利用线程池能带来的好处:

①降低资源消耗;

②提高响应速度;

③提高线程的可管理性;

 

二、线程池的代码实现

1、Executors线程池的工厂类(用来生产线程池)

生产线程池的静态方法:

static ExecutorService newFixedThreadPool(int nThreads)创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程。

参数:创建线程池所包含线程的数量;

返回值:返回的是ExecutorService接口的实现类对象,我们可以用ExecutorService接口接收(面向接口编程);

2、ExecutorService线程池接口

用来从线程池中获取线程,调用start方法执行线程任务:

submit(Runnable task)提交一个Runnable任务用于执行;

关闭/销毁线程池的方法:

void shutdown()

3、线程池的使用步骤

①使用线程工厂Executors的静态方法newFixedThreadPool生成一个指定线程数量的线程池,使用ExecutorService接口接收;

②创建一个类,实现Runnable接口,重写run方法,设置线程任务;

③调用ExecutorService中的submit方法,传递线程任务(实现类),开启线程,执行run方法;

④调用ExecutorService中的shutdown方法,销毁线程池,不建议使用(因为线程池的作用就是复用线程)

4、代码演示

主方法:

package study.thread;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class MyExecutors {
    public static void main(String[] args) {
        //①使用线程工厂Executors的静态方法newFixedThreadPool生成一个指定线程数量的线程池;
        ExecutorService executorService = Executors.newFixedThreadPool(2);
        //②创建一个类,实现Runnable接口,重写run方法,设置线程任务;
        //③调用ExecutorService中的submit方法,传递线程任务(实现类),开启线程,执行run方法;
        executorService.submit(new MyRunnableImpl());
        //一个线程使用完毕之后,会自动归还
        executorService.submit(new MyRunnableImpl());
        executorService.submit(new MyRunnableImpl());
        //可以销毁线程池(不建议执行,若不写这个程序不会停止,尴尬,用时需深入研究)
        executorService.shutdown();

    }
}

Runnable接口实现类:

package study.thread;

public class MyRunnableImpl implements Runnable {
    //②创建一个类,实现Runnable接口,重写run方法,设置线程任务;
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName()+"啦啦啦啦啦啦啦啦啦");
    }
}

运行结果:

pool-1-thread-2啦啦啦啦啦啦啦啦啦
pool-1-thread-1啦啦啦啦啦啦啦啦啦
pool-1-thread-2啦啦啦啦啦啦啦啦啦

 

 

 

 

 

 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值