线程池 -实现线程复用

线程池:


  • 实现线程的复用,无须反复创建线程而消耗过多的资源,提高响应速度

  • 可用集合来实现 容器->集合(ArrayList,HashSet,LinkedList< Thread >,HashMap)

原理:


  • 当程序第一次启动时,创建多个线程,使用时采用Thread T=list.remove(),即可调用线程
  • 同理也可用Thread T=linded.removeFirst();
  • 使用完后记得还回线程池,采用list.add()或linked.addLast(t);
  • 在JDK1.5后,不用自己创建线程池了,已经内置了

线程池创建


  • java.util.concurrent 类 Executors(执行者) -线程池工厂类

  • 利用Executors静态方法创建

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

    返回的是ExecutorService接口的实现类对象,可用其接收(面向接口编程

ExecutorService接口生成的对象:


  • 取线程,调用start方法,执行线程任务用以下方法,内含归还线程

    submit(Runnable task)提交一个Runnable任务进行执行

  • 关闭/销毁线程

    void shutdown()

使用步骤:


  1. 使用线程池的工厂类Executors里提供的静态方法newFixedThreadPool生产一个指定线程数量的线程池,面向接口编程

    ExecutorService exec = Executors.newFixedThreadPool(3);

    多态: 接口 =

  2. 创建一个类,实现Runnable接口,重写run方法,设置线程任务
package cn.learn.thread.ThreadPool;

public class RunnableImpl implements Runnable {
    @Override
    public void run() {
        //获取线程名称
        System.out.println(Thread.currentThread().getName()+"创建了新的线程");
    }
}
  1. 调用ExecutorService对象中的方法submit,传递线程任务(实现类),开启线程,执行方法

    exec.submit(new RunnableImpl());

  2. 调用ExecutorService对象中的方法shutdown销毁线程池(不建议执行)

    exec.submit(new RunnableImpl());


package cn.learn.thread.ThreadPool;

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

public class ThreadPool {
    public static void main(String[] args) {
        //创建线程池,有三个线程
        ExecutorService exec = Executors.newFixedThreadPool(3);
        //调用ExecutorService对象中的方法submit,传递线程任务(实现类),开启线程,执行方法
        exec.submit(new RunnableImpl());
        //线程池一直开启,使用完了会归还给线程池
        exec.submit(new RunnableImpl());
        exec.submit(new RunnableImpl());

        //关闭线程池(不建议执行)
        exec.shutdown();

        //无法再执行,线程池没了,无法获取线程了
        //exec.submit(new RunnableImpl());
    }
}

转载于:https://www.cnblogs.com/huxiaobai/p/11528931.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值