什么是进程:
进程:当我们进入一个应用程序的时候,就会开启一个进程
在进程中至少有一条线程,该线程就是主线程
什么是线程:
线程:线程就是一条程序执行的路径
在进程中开启一条线程执行我们的程序代码,程序执行顺序必须
遵循从上往下的顺序
注意:如果是多线程的情况下,代码执行顺序就是从上往下执行
什么是多线程
也就是在同一个进程中,开启了多条不同的执行路径,每条执行路径相互不影响,
同时执行。
对多线程哪些有好处
提高程序效率,同时的,并行
对线程哪些应用场景
异步的实现发送短信,快速提高响应,对用户的体验非常好
异步的记录日志
对我们后端接口中比较耗时的代码都可以采用异步实现
后端开发为什么需要使用到多线程
因为我们的http协议默认的情况采用同步的形式
整个过程都是基于请求与相应的过程,如果服务器没有及时的
相应给客户端的情况下,就会造成我们浏览器或者是客户端一直等待
这样对我们的用户体验是非常不友好的
单线程与多线程执行到底有哪些区别
单线程代码执行顺序从上往下执行,如果中间某个环节一旦出错,后面将不执行
多线程:也就是采用多条不同的线程执行代码,每个线程执行不影响,可以提高
我们的相应的速度
什么是线程安全:
当多个线程同时共享同一个全局变量做写操作是,可能会受到其他线程的干扰
就会产生线程安全的问题。
产生背景:同时、做写的时候
如何解决线程安全问题
核心思想:在同一时刻,只能有一个线程执行,那么这个时候整个程序就变成单线程执行
只要加上锁缺点:对程序效率执行非常低
java中如何解决线程安全问题
lock锁 synchronized锁 cas无锁,乐观锁
在线程种,同时执行一个方法时,必须要获取锁,只有获取锁的情况下
才可以进去到该方法执行
列:如果A线程获取到锁的情况下,那么B线程就会一直阻塞等待,整个过程是一个悲观锁
必须要等到A线程释放锁之后B线程重新进入获取锁的状态
多个线程如何获取锁,看运气。
锁和对象绑定
锁的可以重入锁
当前的线程如果获取到锁的情况下,再次请求的时候可以直接获取锁
多线程死锁的现象
产生背景:在同步中嵌套同步,也就是在锁中再嵌套锁
同时
线程A先获取object锁,再去获取this锁
线程B先获取this,再去获取object
多线程死锁如何排查
java jdk自带多线程死锁排查工具。
lock锁和synchronized区别
syn锁属于java中内置关键字,lock是基于aqs封装锁
syn自动挡,当代码运行完毕或程序抛出异常情况下,自动释放
lock可以完全人为控制获取,释放锁,扩张性非常高,分为读写锁