多线程并发设计原理-简介

并发编程

java是⼀个⽀持多线程的开发语⾔。多线程可以在包含多个CPU核⼼的机器上同时处理多个不同的任务,优化资
源的使⽤率,提升程序的效率。在⼀些对性能要求⽐较⾼场合,多线程是java程序调优的重要⽅⾯。
⼤⼚⾯试中⽐较重要的内容除了算法,就是并发编程。并发编程是最能体现⼀个程序员功底的⽅⾯之⼀。
并发编程也是在⾯试中很能加分的部分。
Java并发编程主要涉及以下⼏个部分:

  1. 并发编程三要素
    原⼦性:即⼀个不可再被分割的颗粒。在Java中原⼦性指的是⼀个或多个操作要么全部执⾏成功要么全部执
    ⾏失败。
    有序性:程序执⾏的顺序按照代码的先后顺序执⾏。(处理器可能会对指令进⾏重排序)
    可⻅性:当多个线程访问同⼀个变量时,如果其中⼀个线程对其作了修改,其他线程能⽴即获取到最新的
    值。
  2. 线程的五⼤状态
    创建状态:当⽤ new 操作符创建⼀个线程的时候
    就绪状态:调⽤ start ⽅法,处于就绪状态的线程并不⼀定⻢上就会执⾏ run ⽅法,还需要等待CPU的调度
    运⾏状态:CPU 开始调度线程,并开始执⾏ run ⽅法
    阻塞状态:线程的执⾏过程中由于⼀些原因进⼊阻塞状态⽐如:调⽤ sleep ⽅法、尝试去得到⼀个锁等等
    死亡状态:run ⽅法执⾏完 或者 执⾏过程中遇到了⼀个异常
  3. 悲观锁与乐观锁
    悲观锁:每次操作都会加锁,会造成线程阻塞。
    乐观锁:每次操作不加锁⽽是假设没有冲突⽽去完成某项操作,如果因为冲突失败就重试,直到成功为⽌,
    不会造成线程阻塞。
  4. 线程之间的协作
    线程间的协作有:wait/notify/notifyAll等
  5. synchronized 关键字
    synchronized是Java中的关键字,是⼀种同步锁。它修饰的对象有以下⼏种:
    修饰⼀个代码块:被修饰的代码块称为同步语句块,其作⽤的范围是⼤括号{}括起来的代码,作⽤
    的对象是调⽤这个代码块的对象
    修饰⼀个⽅法:被修饰的⽅法称为同步⽅法,其作⽤的范围是整个⽅法,作⽤的对象是调⽤这个⽅
    法的对象
    修饰⼀个静态的⽅法:其作⽤的范围是整个静态⽅法,作⽤的对象是这个类的所有对象
    修饰⼀个类:其作⽤的范围是synchronized后⾯括号括起来的部分,作⽤主的对象是这个类的所
    有对象。
  6. CAS
    CAS全称是Compare And Swap,即⽐较替换,是实现并发应⽤到的⼀种技术。操作包含三个操作数—内存
    位置(V)、预期原值(A)和新值(B)。 如果内存位置的值与预期原值相匹配,那么处理器会⾃动将该位置
    值更新为新值 。否则,处理器不做任何操作。
    CAS存在三⼤问题:ABA问题,循环时间⻓开销⼤,以及只能保证⼀个共享变量的原⼦操作。
  7. 线程池
    如果我们使⽤线程的时候就去创建⼀个线程,虽然简单,但是存在很⼤的问题。如果并发的线程数量很多,
    并且每个线程都是执⾏⼀个时间很短的任务就结束了,这样频繁创建线程就会⼤⼤降低系统的效率,因为频
    繁创建线程和销毁线程需要时间。线程池通过复⽤可以⼤⼤减少线程频繁创建与销毁带来的性能上的损耗。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值