1.1 什么是线程?
线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。
简单来说,线程可以理解成为在进程中独立运行的子任务。比如,QQ.exe运行中就有很多的子任务在同时运行。
1.2 进程和线程的区别
1.2.1 调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位 。
1.2.2 并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行。
1.2.3 拥有资源:进程是拥有资源的一个独立单位,线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器、一组寄存器和栈),但是它可以与同属一个进程的其他线程共享进程所拥有的全部资源。进程之间是不能共享地址空间的, 而线程是共享着所在进程的地址空间的。
1.2.4 系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。
1.3 什么是多线程?
多线程就是几乎同时执行多个线程。
1.4 为什么要使用多线程
1.4.1 使用线程可以把占据时间长的程序中的任务放到后台去处理。
1.4.2 用户界面更加吸引人,这样比如用户点击了一个按钮去触发某件事件的处理,可以弹出一个进度条来显示处理的进度。
1.4.3 程序的运行效率可能会提高。
1.4.4 在一些等待的任务实现上如用户输入,文件读取和网络收发数据等,线程就比较有用了。
2 线程的状态
=======
一般来说,线程包括以下这几个状态:创建(new)、就绪(runnable)、运行(running)、阻塞(blocked)、timed_waiting、waiting、消亡(dead)。
3 多线程的使用方式
==========
3.1 继承 Thread类
可以看到程序在交替执行,但是最终都会执行到98。
3.2 实现Runnable接口
依旧可以看到程序在交替执行,但是最终都会执行到98。
3.3 继承实现Callable接口
这里需要说明的是实现Callable接口,必须重写call()方法,并且要用到FutureTask类,这里先不做介绍,等后面更新线程池再细讲。
3.4 使用线程池例如用Executor框架
这部分暂不介绍。后面更新线程池和Executor会详细介绍。
4 使用多线程一定快吗?
============
答:不一定,因为多线程会进行上下文切换,上下文切换会带来开销。
4.1 什么是上下文切换?
对于单核 CPU,CPU 在一个时刻只能运行一个线程,当在运行一个线程的过程中转去运行另外一个线程,这个叫做线程上下文切换(对于进程也是类似)。线程上下文切换过程中会记录 程序计数器、CPU 寄存器 的 状态等数据。
4.2 如何减少上下文切换?
4.2.1 减少线程的数量
由于一个CPU每个时刻只能执行一条线程,而傲娇的我们又想让程序并发执行,操作系统只好不断地进行上下文切换来使我们从感官上觉得程序是并发执的行。因此,我们只要减少线程的数量,就能减少上下文切换的次数。
然而如果线程数量已经少于CPU核数,每个CPU执行一条线程,照理来说CPU不需要进行上下文切换了,但事实并非如此。
4.2.2 控制同一把锁上的线程数量
如果多条线程共用同一把锁,那么当一条线程获得锁后,其他线程就会被阻塞;当该线程释放锁后,操作系统会从被阻塞的线程中选一条执行,从而又会出现上下文切换。
因此,减少同一把锁上的线程数量也能减少上下文切换的次数。
4.2.3 采用无锁并发编程
Spring全套教学资料
Spring是Java程序员的《葵花宝典》,其中提供的各种大招,能简化我们的开发,大大提升开发效率!目前99%的公司使用了Spring,大家可以去各大招聘网站看一下,Spring算是必备技能,所以一定要掌握。
资料领取方式:点击这里前往蓝色传送门
目录:
部分内容:
Spring源码
- 第一部分 Spring 概述
- 第二部分 核心思想
- 第三部分 手写实现 IoC 和 AOP(自定义Spring框架)
- 第四部分 Spring IOC 高级应用
基础特性
高级特性 - 第五部分 Spring IOC源码深度剖析
设计优雅
设计模式
注意:原则、方法和技巧 - 第六部分 Spring AOP 应用
声明事务控制 - 第七部分 Spring AOP源码深度剖析
必要的笔记、必要的图、通俗易懂的语言化解知识难点
脚手框架:SpringBoot技术
它的目标是简化Spring应用和服务的创建、开发与部署,简化了配置文件,使用嵌入式web服务器,含有诸多开箱即用的微服务功能,可以和spring cloud联合部署。
Spring Boot的核心思想是约定大于配置,应用只需要很少的配置即可,简化了应用开发模式。
- SpringBoot入门
- 配置文件
- 日志
- Web开发
- Docker
- SpringBoot与数据访问
- 启动配置原理
- 自定义starter
微服务架构:Spring Cloud Alibaba
同 Spring Cloud 一样,Spring Cloud Alibaba 也是一套微服务解决方案,包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。
- 微服务架构介绍
- Spring Cloud Alibaba介绍
- 微服务环境搭建
- 服务治理
- 服务容错
- 服务网关
- 链路追踪
- ZipKin集成及数据持久化
- 消息驱动
- 短信服务
- Nacos Confifig—服务配置
- Seata—分布式事务
- Dubbo—rpc通信
Spring MVC
目录:
部分内容:
…(img-eWEU6A0u-1628573159935)]
Spring MVC
目录:
[外链图片转存中…(img-WcFsxqLf-1628573159936)]
[外链图片转存中…(img-wgCgLAd9-1628573159937)]
[外链图片转存中…(img-SeVMjlMs-1628573159938)]
部分内容:
[外链图片转存中…(img-mtM76Ffa-1628573159939)]
[外链图片转存中…(img-Ktw6yELE-1628573159939)]