JavaThread 16 线程池(只作为提前了解) → Executors&&ExecutorService

6.4 线程池


6.4.1 线程池 理解

  • 背景:我们经常会创建和销毁、使用量特别大的资源,比如并发情况下的线程。这会对性能造成较大的影响。

比如创建 一万个线程 跑 一句话。就好比 你买了 一万个 交通设备,然后 去 一个地方一样,是很没必要的!

  • 思路:提前创建好多个线程,放入线程池中,使用时直接获取,使用完再放回池子中。(何乐而不为呢?)

线程池 可以避免频繁创建和销毁线程!!实现重复利用!!这就类似于 咱们生活中的 公共交通工具呀 ~

  • 好处:
  1. 提高响应速度(减少了创建新线程的时间)

  2. 降低资源消耗(重复利用线程池中的线程,不需要每次都创建)

  3. 便于线程的管理(…)

  • corePoolSize:核心池的大小

  • maximumPoolSize:最大线程数

  • keepAliveTime:线程没有任务时最多保持多长时间后会终止


6.4.2 线程池 使用

  • JDK 5.0 起 就提供了 线程池的 相关 API:ExecutorService(执行服务),就是我们之前 用 Callable 接口的时候 用到的 一个 东西。 还有 Executors。

  • ExecutorService:真正的线程池接口。

  • ThreadPoolExecutor:线程池接口的实现类。(暂时不讲,不学习,JUC 的时候 才会 针对于 线程池 展开 疯狂的 学习!!!)

  1. void execute(Runnable command):执行任务/命令,没有返回值,一般用来 执行 Runnable。

  2. <T>Future<T>submit(Callabel<T>task):执行任务,有返回值,一般用来执行 Callable。

  3. void shutdown():关闭连接池

  • Executors:工具类、线程池的工厂类,是用于创建并返回不同类型的线程池的!<非常的重要!!>

切记:是 Executors 不是 Executor 别打字打错了,差这一个 字母 差很多的!!!

  • Runnable 线程池 调用:
package www.muquanyu.Seniorpart;

import sun.nio.ch.ThreadPool;

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

public class 线程池 {
    public static void main(String[] args) {
        //直奔主题 创建一个线程池
        //参数为 池子的 大小
        ExecutorService executorService = Executors.newFixedThreadPool(10);

        //往里面 扔 事务,自然就有 线程去接应
        executorService.execute(new MyRunnable());
        executorService.execute(new MyRunnable());
        executorService.execute(new MyRunnable());
        executorService.execute(new MyRunnable());
        executorService.submit()


        //2.关闭 链接
        executorService.shutdown();


    }
}

class MyRunnable implements Runnable {
    @Override
    public void run(){
        for(int i = 0;i < 10;++i)
        {
            System.out.println(Thread.currentThread().getName()+"-->"+i);
        }
    }
}

在这里插入图片描述

  • Callable 线程池 调用:
package www.muquanyu.Seniorpart;

import sun.nio.ch.ThreadPool;

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

public class 线程池 {
    public static void main(String[] args) {
        //直奔主题 创建一个线程池
        //参数为 池子的 大小
        ExecutorService executorService = Executors.newFixedThreadPool(10);

        //往里面 扔 事务,自然就有 线程去接应
        //executorService.execute(new MyRunnable());
        //executorService.execute(new MyRunnable());
       // executorService.execute(new MyRunnable());
        //executorService.execute(new MyRunnable());
        executorService.submit(new MyCallable());
        executorService.submit(new MyCallable());
        executorService.submit(new MyCallable());
        executorService.submit(new MyCallable());


        //2.关闭 链接
        executorService.shutdown();


    }
}

class MyRunnable implements Runnable {
    @Override
    public void run(){
        for(int i = 0;i < 10;++i)
        {
            System.out.println(Thread.currentThread().getName()+"-->"+i);
        }
    }
}

class MyCallable implements Callable<Boolean> {

    @Override
    public Boolean call() throws Exception {
        for(int i = 0;i < 10;++i)
        {
            System.out.println(Thread.currentThread().getName()+"-->"+i);
        }
        return true;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值