多线程 线程池

本文详细介绍了Java中的线程池,包括线程池的作用、常用方法、四种类型的线程池(单个线程、定长、缓存、定时)以及核心类ThreadPoolExecutor的构造参数、重要方法和拒绝策略。通过示例展示了线程池如何控制并发任务的数量,以实现资源的有效管理和内存的合理消耗。
摘要由CSDN通过智能技术生成

介绍

线程池,其实就是一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多资源。
线程池使用和多线程相关联。由于多线程的原理是消耗cup内存,来提高效率,线程过多时,会大量消耗内存的资源,即便是使用多线程来提高代码的执行效率,也要考虑内存等资源的压力,例如开启10000个复制文件的线程,那内存直接溢出,会影响其他的程序,多线程在提高效率的同时也要规范内存资源的使用,所以依赖于线程池
线程池:在执行开启线程之前, 先创建一个线程池,例如指定线程池最大线程为5,那么再由线程池去开启线程,这就保证了多线程,开启是有规定个数的,维护内存正常消耗;

常用的方法:

(1)通过Executors创建线程池
(2)execute():执行线程
(3)shutdown():停止线程

线程池的种类(4种)

(1).单个线程池:

newSingleThreadExecutor()
创建单个线程池

(2).定长线程池:

newFixedThreadPool(Integer)
规定多少个 可控制线程最大并发数,超出的线程会在队列中等待

(3).缓存线程池

newCachedThreadPool()
先查看池中有没有以前建立的线程,如果有,就直接使用
如果没有就建一个新的线程加入池中,缓存型池子通常用于执行一些生存期很短的异步型任务

(4).定时线程池

newScheduledThreadPool
new Runnable() 调用这个方法执行线程

executorService.schedule(Runnable,时间,时间单位);
固定时间之后,才执行任务;
例:
@Override
public void run() {
//当前时间 线程名
System.out.println(System.currentTimeMillis() +"—"+Thread.currentThread().getName());
}
//几秒执行线程 时间单元
},5, TimeUnit.SECONDS);

}

1:单个线程池

newSingleThreadExecutor

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

/**
 * 单个线程池
 */
public class Demo implements Runnable {
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName());
    }
}

class testDemo{
public static void main(String[]args){
    //创建单线程池
    ExecutorService executorService = Executors.newSingleThreadExecutor();
    for (int i = 0; i < 10; i++) {
        executorService.execute(new Demo());
    }
        executorService.shutdown();//停止线程
}
}

效果图:

在这里插入图片描述

2:定长线程池

newFixedThreadPool

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

/**
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值