java怎么启动线程池?java启动线程的方法
我们在学习软件开发时,多线程,高并发是一个必不可少的知识点,也是在面试时必会问到的内容。最近有小伙伴询问java怎么启动线程池?本篇来统一解答一下java启动线程的方法。
java怎么启动线程池?
Java中创建线程有四种方式,我们下面依次介绍一下。
1、继承 Thread 类
(1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。因此把run()方法称为执行体。
(2)创建Thread子类的实例对象,即创建了一个线程对象。
(3)调用该线程对象的start()方法来启动该线程。
2、实现Runnable接口
(1)定义Runnable接口的实现类,并重写该接口的run()方法,该run()方法的方法体同样是该线程的线程执行体。
(2)创建 Runnable实现类的实例对象,并将该实例作为Thread的target来创建一个Thread对象,该Thread对象才是真正的线程运行对象。
(3)调用该线程对象的start()方法来启动线程。
3、实现Callable接口
(1)创建Callable接口的实现类,并实现call()方法,该call()方法将作为线程执行体,并且有返回值。
(2)创建Callable实现类的实例,使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对象的call()方法的返回值。
(3)使用FutureTask对象作为Thread对象的target创建并启动新线程。
(4)调用FutureTask对象的get()方法来获得子线程执行结束后的返回值。
4、线程池Java默认提供了五种线程池,通过Executors创建,分别为:
(1)「newCachedThreadPool」 创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
(2)「newFixedThreadPool」 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
(3)「newScheduledThreadPool」 创建一个定长线程池,支持定时及周期性任务执行。
(4)「newSingleThreadExecutor」 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。
(5)「newWorkStealingPool」 创建一个具有抢占式操作的线程池,由于能够合理的使用CPU进行对任务操作(并行操作),所以适合使用在很耗时的任务中。
文末附免费下载方式
(一). 基础
1、Java 基本功
-
Java 入门(基础概念与常识) Java 语法 基本数据类型 方法(函数)
2、Java 面向对象
-
类和对象 面向对象三大特征 修饰符 接口和抽象类 其它重要知识点
3、Java 核心技术
-
集合 异常 多线程 文件与 IO 流
(二). 并发
1、并发容器
-
JDK 提供的并发容器总结 ConcurrentHashMap CopyOnWriteArrayList ConcurrentLinkedQueue BlockingQueue ConcurrentSkipListMap
2、线程池
-
使用线程池的好处 Executor 框架 (重要)ThreadPoolExecutor 类简单介绍 (重要)ThreadPoolExecutor 使用示例 几种常见的线程池详解 ScheduledThreadPoolExecutor 详解 线程池大小确定
3、乐观锁与悲观锁
-
何谓悲观锁与乐观锁 乐观锁常见的两种实现方式 乐观锁的缺点 CAS与synchronized的使用情景
(三). JVM
1、Java内存区域
-
概述 运行时数据区域 HotSpot 虚拟机对象探秘 重点补充内容
2、JVM垃圾回收
-
揭开 JVM 内存分配与回收的神秘面纱 对象已经死亡? 垃圾收集算法 垃圾收集器
3、JDK 监控和故障处理工具
-
JDK 命令行工具 JDK 可视化分析工具
(四)网络、linux、数据结构与算法、数据库、系统设计、必会工具、面试指南
因为篇幅有限,其他内容就不一一展示了,这本进阶笔记总共有512页。对于想要进阶的小伙伴来说应该会很有帮助,希望也能帮助到你。