首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
第一章:相关概念
1.1 并发和并行
1.2 进程和线程
1.3 线程调度
1.4 多线程的应用场景
第二章:线程的创建和使用
2.1 概述
2.1 JDK 5之前创建线程的方式
2.1.1 概述
2.1.2 继承 Thread 类
2.1.3 实现 Runnable 接口
2.1.4 继承方式和实现方式的区别
2.2 设置线程名称和获取线程名称
2.3 线程的优先级
第三章:线程安全
3.1 售票程序引出线程安全
3.2 线程安全的原因
3.3 线程安全的解决方法
3.4 JDK 5 之前解决线程安全
3.4.1 概述
3.4.2 同步机制的原理
3.4.3 同步机制中的锁
3.4.4 应用示例
3.5 JDK 5 之后解决线程安全
3.6 死锁
3.7 synchronized 与 Lock 的对比
第四章:线程通信
4.1 为什么需要线程通信?
4.2 等待唤醒机制
4.3 生产者和消费者问题
4.4 sleep() 和 wait() 方法的区别
4.5 生产者和消费者性能问题
4.6 Lock 接口的深入
第五章:单例设计模式
5.1 概述
5.2 单例模式
第六章:线程池
6.1 概述
6.2 线程池相关的API
6.3 实现 Callable 接口
6.4 ThreadPoolExecutor
第七章:线程的生命周期
第八章:volatile 关键字
8.1 概述
8.2 应用示例
第九章:原子性
9.1 概述
9.2 AtomicInteger
9.2.1 常用方法
9.2.2 原理
9.2.3 源码解析
9.3 synchronized 和 CAS 的区别
第十章:并发工具类
10.1 Hashtable
10.2 ConcurrentHashMap
10.3 CountDownLatch
10.4 Semaphore
当前位置:
首页>>
技术小册>>
Java语言基础8-Java多线程
小册名称:Java语言基础8-Java多线程
构造方法: ```bash public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler) { ... } ``` ● 解释: - corePoolSize :核心线程数量。 - maximumPoolSize :线程池中的最大线程数量(核心线程数量 + 临时线程数量)。 - keepAliveTime :空闲时间值(也可以称为存活时间),即临时线程空闲多少时间被销毁,比如:1。 - unit :空闲时间单位(存活时间单位),即临时线程空闲多少时间被销毁,如:TimeUnit.SECONDS 表示秒。 - workQueue :任务队列(阻塞队列),如:20 个任务只有 10 个线程同时工作,那么多余的 10 个任务将放到任务队列中,等有线程空闲了,再从任务队列中取出任务继续执行。 - threadFactory :创建线程工厂,一般都是采用 Executors.defaultThreadFactory() 方式。 - handler :任务的拒绝策略,当任务太多(提交任务超过了线程池中的最大线程数量+任务队列的容量)的时候的解决方案。 ■ new ThreadPoolExecutor.AbortPolicy() :默认的策略,丢弃任务并抛出 RejectedExecutionException 异常。 ■ new ThreadPoolExecutor.DiscardPolicy() :丢失任务,但是不抛出异常,不推荐。 ■ new ThreadPoolExecutor.DiscardOldestPolicy() :抛弃队列中等待最久的任务,然后将当前任务加入到队列中。 ■ new ThreadPoolExecutor.CallerRunsPolicy() :调用任务的run()方法绕过线程池直接执行。 ● 示例: ```bash package com.github.demo10; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.Executors; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; /** * @author maxiaoke.com * @version 1.0 */ public class Test { public static void main(String[] args) { // 参数1:核心线程数量 // 参数2:最大线程数量 // 参数3:空闲线程的最大存活时间 // 参数4:时间单位 // 参数5:任务队列 // 参数6:创建线程工程 // 参数7:任务的拒绝策略 ThreadPoolExecutor pool = new ThreadPoolExecutor(2, 5, 2, TimeUnit.SECONDS, new ArrayBlockingQueue<>(10), Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy()); pool.submit(() -> System.out.println(Thread.currentThread().getName() + ":你好啊")); pool.submit(() -> System.out.println(Thread.currentThread().getName() + ":我很好")); pool.submit(() -> System.out.println(Thread.currentThread().getName() + ":哦")); pool.submit(() -> System.out.println(Thread.currentThread().getName() + ":再见")); pool.submit(() -> System.out.println(Thread.currentThread().getName() + ":再见")); pool.shutdown(); } } ```
上一篇:
6.3 实现 Callable 接口
下一篇:
第七章:线程的生命周期
该分类下的相关小册推荐:
Java语言基础9-常用API和常见算法
Java高并发秒杀入门与实战
Java语言基础7-Java中的异常
SpringBoot合辑-初级篇
Java必知必会-Maven高级
Java语言基础6-面向对象高级
Java语言基础16-JDK8 新特性
Mybatis合辑5-注解、扩展、SQL构建
Java语言基础2-运算符
Mybatis合辑4-Mybatis缓存机制
Mybatis合辑2-Mybatis映射文件
Java语言基础15-单元测试和日志技术