news 2026/4/27 6:49:14

Java 核心知识 多线程 线程池

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java 核心知识 多线程 线程池

一 Java多线程

Java核心知识体系7:线程不安全分析
Java核心知识体系8:Java如何保证线程安全性
Java核心知识体系9-并发与多线程:线程基础
Java核心知识体系10-线程管理

Java中的多线程
https://www.cnblogs.com/wxd0108/p/5479442.html

面试题

(面试题)多线程下单例模式下全局变量共享问题 当多个线程同时访问同一个方法的时候,jvm会给每个线程分配单独的局域变量,这样就不会出现问题了。
(面试题)多线程调用单例类中的方法会不会造成线程安全问题? 答案:不会。 局部变量不会受多线程影响;但成员变量会受到多线程影响。 多个线程应该是调用的同一个对象的同一个方法; 如果方法里无成员变量,那么不受任何影响; 如果方法里有成员变量,只有读操作,不受影响;存在写操作,考虑多线程影响值
(面试题)为什么需要线程池,线程池的作用?1.统一管理降低资源消耗,2.提高响应速度,3.提高线程可管理性; (面试题)线程池队列满了怎么处理?线程出异常怎么处理?

线程的生命周期

线程通常都有五种状态,创建、就绪、运行、阻塞和死亡

Thread 和 Runnable的区别

实例化线程对象有所不同:
extends Thread :t.start();
implements Runnable :new Thread(t).start();

实现Runnable接口比继承Thread类所具有的优势:
1):适合多个相同的程序代码的线程去处理同一个资源
2):可以避免java中的单继承的限制(不能访问父类的私有成员?)
3):增加程序的健壮性,代码可以被多个线程共享,代码和数据独立
4):线程池只能放入实现Runable或callable类线程,不能直接放入继承Thread的类

run()和start()方法的区别

run方法:是线程的任务处理逻辑的入口方法,它由Java虚拟机在运行相应线程时直接调用,而不是由应用代码进行调用。
调用run方法其实就是当作普通的方法的方式调用。并没有创建一个线程,程序中依旧只有一个主线程,必须等到run()方法里面的代码执行完毕,才会继续执行下面的代码,这样就没有达到加入线程的目的。

start方法:是启动相应的线程。启动一个线程实际是请求Java虚拟机运行相应的线程,而这个线程何时能够运行是由线程调度器决定的。start()调用并不表示相应线程已经开始运行,这个线程可能稍后运行。
创建并启动一个线程,真正实现了多线程。无需等待run()方法中的代码执行完毕,就可以接着执行下面的代码。此时start()的这个线程处于就绪状态,当得到CPU的时间片后就会执行其中的run()方法。这个run()方法包含了要执行的这个线程的内容,run()方法运行结束线程终止。

start()方法能够异步的调用run()方法,但是直接调用run()方法却是同步的,无法达到多线程的目的。因此,只用通过调用线程类的start()方法才能达到多线程的目的。

双重校验锁的单例模式

volatile修饰singleton很有必要,voliatile防止了指令重排

在这里插入代码片

volatile关键字

在现在的java模型下,线程可以把变量保存在本地内存(比如寄存器)中,而不是直接在主内存中进行读写,这就可能造成一个线程在主内存中修改了一个变量的值,而另外一个线程还继续使用它在寄存器中的变量的拷贝,造成数据不一致。

sychronized关键字

sychronized和volatile的区别

实现Runnable和Callable接口的区别

https://www.jianshu.com/p/27b7340d8470

二 线程池 Executors

线程池的作用

在实践应用中创建线程池主要是为了:

  1. 减少资源开销:减少每次创建、销毁线程的开销;
  2. 提高响应速度:请求到来时,线程已创建好,可直接执行,提高响应速度;
  3. 提高线程的可管理性:线程是稀缺资源,需根据情况加以限制,确保系统稳定运行;

Java中创建线程的4种方式

1.继承Thread 2.实现Runnable接口;3.实现Callable接口;4.线程池Executors 和 ThreadPoolExecutor 自定义线程池。

通过 Callable 和 Future 创建线程

1.创建 Callable 接口的实现类,并实现 call() 方法,该 call() 方法将作为线程执行体,并且有返回值。
2.创建 Callable 实现类的实例,使用 FutureTask 类来包装 Callable 对象,该 FutureTask 对象封装了该 Callable 对象的 call() 方法的返回值。
3.使用 FutureTask 对象作为 Thread 对象的 target 创建并启动新线程。
4.调用 FutureTask 对象的 get() 方法来获得子线程执行结束后的返回值。

Java自带的四种线程池创建方式

Executors.newFixedThreadPool(5); //一个饭店5张桌子
Executors.newSingleThreadPool(); //一个饭店1张桌子
Executors.newCachedThreadPool(); //一个饭店可以动态加桌子

newScheduledThreadPool // 定时任务线程池

JAVA线程池的四种创建方式和使用场景 https://blog.csdn.net/hekai7217/article/details/147090211

关于阿里规约

线程资源必须通过线程池提供,不允许在应用中自行显式创建线程。
线程池不允许Executors去创建,而是通过ThreadPoolExecutor的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。
说明:Executors返回的线程池对象的弊端如下:
1)FixedThreadPool和SingleThreadPool:允许的请求队列长度为Integer.MAX_VALUE,可能会堆积大量的请求,从而导致OOM。
2)CachedThreadPool:允许的创建线程数量为Integer.MAX_VALUE,可能会创建大量的线程,从而导致OOM。

参考资料

Java中的多线程
https://www.cnblogs.com/wxd0108/p/5479442.html

volatile的设计原理
https://mp.weixin.qq.com/s/WTqdSz-lc5zzelJgk4Co8g

ThreadPoolExecutor
https://mp.weixin.qq.com/s/ROQMBFw0DWM4sSP-sdy-IA

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/27 6:44:21

Bitalostored实战应用:如何将Redis迁移到Bitalostored并节省80%成本

Bitalostored实战应用:如何将Redis迁移到Bitalostored并节省80%成本 【免费下载链接】bitalostored Bitalostored is a high-performance distributed storage system, core engine based on bitalosdb(self-developed), compatible with Redis protocol. 项目地址…

作者头像 李华
网站建设 2026/4/27 6:41:11

MySQL数据库安装教程-免安装

Windows (x86, 64-bit), ZIP Archive,这是 免安装压缩版,不是 MSI 安装包,所以解压后没有.msi文件是正常的。一、先确认你下对了版本你解压后的目录里有 bin/、include/、lib/、share/,这是完整的 MySQL Server 服务端压缩包&…

作者头像 李华
网站建设 2026/4/27 6:40:41

luci-app-unblockneteasemusic安全配置:HTTPS劫持与证书管理完全指南

luci-app-unblockneteasemusic安全配置:HTTPS劫持与证书管理完全指南 【免费下载链接】luci-app-unblockneteasemusic [OpenWrt] 解除网易云音乐播放限制 项目地址: https://gitcode.com/gh_mirrors/lu/luci-app-unblockneteasemusic luci-app-unblockneteas…

作者头像 李华
网站建设 2026/4/27 6:40:20

LFM2.5-VL-1.6B部署案例:OpenStack虚拟机中GPU直通部署全流程

LFM2.5-VL-1.6B部署案例:OpenStack虚拟机中GPU直通部署全流程 1. 项目概述 LFM2.5-VL-1.6B是由Liquid AI推出的轻量级多模态大模型,专为边缘计算和端侧设备设计。这款模型在1.6B参数规模下实现了出色的图文理解能力,特别适合需要离线运行、…

作者头像 李华
网站建设 2026/4/27 6:39:25

农村博士的消费困境:攒多少钱才敢买杯奶茶?

从田埂到实验室:农村读博的我,到底要攒够多少钱,才敢给自己花30块买一杯奶茶? 这里写目录标题 从田埂到实验室:农村读博的我,到底要攒够多少钱,才敢给自己花30块买一杯奶茶? 我们不敢消费,从来不是没钱,是背上了三道无形的枷锁 第一道枷锁:倾全家之力托举的“愧疚牢…

作者头像 李华