多线程的详细介绍

为什么要是使用多线程?

使用多线程有以下的好处:

  1. 提高处理速度: 多线程可以同时执行多个任务,将大型或耗时的任务分成几个并发的子任务来执行,从而减少总体执行时间。这对于需要处理大量数据或需要频繁进行 IO 操作的程序非常有用。

  2. 改善用户体验: 在用户界面中使用多线程可以保持界面的响应性,使得用户可以继续操作和与界面交互,而不会被单个任务的阻塞所影响。

  3. 充分利用多核处理器: 多线程可以有效地利用多核处理器的计算能力。通过将任务分配到不同的核心上并行执行,可以更好地利用硬件资源,提高系统整体的处理能力。

  4. 实现并发性: 多线程可以使程序同时执行多个任务,实现并发性。这对于需要同时处理多个请求、同时处理多个网络连接或同时执行多个计算任务等场景非常有用。

什么是多线程?

多线程是指在一个程序中同时运行多个线程的技术。线程是操作系统能够进行运算调度的最小单位,它被包含在进程中,是进程中的实际执行单位。

传统的单线程程序只能按照一定的顺序依次执行任务,而多线程程序可以同时运行多个线程,每个线程可以独立执行不同的任务。这意味着多个线程可以在同一时间进行不同的计算或操作,提高了程序的处理能力和效率。

线程和进程的区别?

进程就像是手机的应用软件。而线程是相当于应用软件中的不同的功能。

多线程的创建方式

创建的方式一共有四种

  1. 继承Thread类 ,重写run方法

  2. 实现Runable,重写run方法

  3. 实现Callable,重写call方法

  4. 创建线程池

线程池的工作流程(重要部分

当有任务提交的时候,

  1. 判断是否到达核心线程数量,没有达到,创建工作线程来执行这个任务。
  2. 判断工作队列是否已满?  如果没有满,将提交新的任务放到工作队列中
  3. 判断线程池的最大线程数 是否达到? 如果没有,再创建工作线程来执行这个任务
  4. 最后,核心线程数  ,工作队列,最大线程数 ,没有满了,就执行拒绝策略来处理这个任务。

线程池的核心参数(重要

一共有

  1. 核心线程数
  2. 最大线程数
  3. 阻塞队列
  4. 线程存活时间
  5. 临时线程存活时间单位
  6. 线程工厂
  7. 拒绝策略

其中拒绝策略又分为四种

  1. AbortPolicy:丢弃任务并抛出RejectedExecutionException异常。 (默认)
  2. DiscardPolicy:丢弃任务,但是不抛出异常。如果线程队列已满,则后续提交的任务都会被丢弃,且是静默丢弃。
  3. DiscardOldestPolicy:丢弃队列最前面的任务,然后重新提交被拒绝的任务。
  4. CallerRunsPolicy:由调用线程处理该任务

线程的状态

新建、就绪、运行、阻塞、死亡

线程安全问题

容易出现共享数据问题

解决方案

使用锁,Synchronized 与 Lock

锁 的分类  为乐观锁 ,悲观锁  公平锁和非公平锁

线程通信

1,同步通信

2,异步通信

3,进程之间的通信性能

多线程并发

线程安全的特性

原子性:一个线程操作是不能被其他线程打断

有序性:线程在执行程序是有序的

可见性:一个线程修改数据后,对其他线程是可见的

使用volatile

保证可见性,可以在一个线程修改了共享数据时对其他线程可见,其原理就是修改了变量副本值后及时同步到主内存,其他线程从主内存中获取

保证有序性,会禁止指令重排  。指令重排:Java代码翻译成class文件后,最终在JVM执行时,是把class翻译一个个的指令进行执行的。而CPU为了程序的执行性能,会对指令进行重新排序

单例模式

使用双重校验锁

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值