基础篇(原理)--- 多线程

目录

基本概念

使用多线程的优缺点

内存可见性和关键字

原子变量与CAS算法

多线程锁

实现方式

线程通信方式

线程调度

 


基本概念

    进程

      进程是操作系统结构的基础,是一次程序的执行,是一个程序及其数据在处理机上顺序执行时所发生的活动

      一个程序进入内存运行,即变成一个进程。进程是处于运行过程中的程序,并且具有一定独立功能

      操作系统中,几乎所有运行中的任务对应一条进程,进程是系统进行资源分配和调度的一个独立单位

      进程是系统中独立存在的实体,拥有自己独立的资源,拥有自己私有的地址空间,是资源分配的最小单位

      进程具有并发性,它可以同其他进程一起并发执行,一个进程可以包含多个线程

    线程

      线程有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元

      同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小

      线程是程序中一个单一的顺序控制流程。在单个程序中同时运行多个线程完成不同的工作,称为多线程

    并行

      多个CPU实例或者多台机器同时执行一段处理逻辑,是真正的同时

    并发

      通过CPU调度算法,让用户看上去同时执行,实际上从CPU操作层面不是真正的同时

    总结

      进程和线程的主要差别在于它们是不同的操作系统资源管理方式

      一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮

      一个程序至少有一个进程,一个进程至少有一个线程

使用多线程的优缺点

    优点

      可以更好的利用CPU的资源,提高程序的响应速度和效率

      可以用多个简单的线程完成复杂的逻辑,就像多个人共同解决一件事情一样

      创建一个新线程的代价要比创建一个新进程小的多

      可使一些复杂的运算分给多个线程分别运算,使程序简单高效

    缺点

      多线程并发时会产生资源争夺,没有处理好会造成死锁,对程序影响很大

      多线程访问同一个变量会造成变的值得改变超出预期

      线程中止没处理好的话会对程序运行造成影响

      对线程进行管理要求额外的 CPU开销,线程过多反而影响性能效率

内存可见性和关键字

    概念

      内存可见性是指在多线程访问共享变量时,一个线程对共享变量做修改时,能够及时的被其它线程看到

      线程对共享变量的所有操作都必须在自己的工作内存中,里面的内容拷贝于主存,共享变量存在主内存中

      不同线程之前工作内存中的变量不能相互访问,不同线程间的值传递主要通过主存来完成

    原理

      内存可见性就是把不同工作内存中的共享变量刷新到主存中,再通过主存把共享变量更新到其它工作内存中

    关键字

      synchronized和volatile,前者具有原子性和一致性,后者是一种较为轻量级的同步策略,点击查看原文

原子变量与CAS算法

    原子变量保证了该变量的所有操作都是原子的,不会因为多线程的同时访问而导致脏数据的读取问题

    Java提供的有原子类型,比如Integer的原子类型为AtomicInteger,这个类型可以保证线程安全

    CAS(Compare-and-Swap)比较并替换,是并发中常用到的技术,点击可查看其他博主的讲解

多线程锁

    闭锁

      闭锁可以延迟线程的进度直到其到达终止状态,闭锁可以用来确保某些活动直到其他活动都完成才继续执行

    隐式锁

      synchronized,可用余同步代码块或同步方法

    显示锁

      Lock,用在方法里面,需要通过lock()方法上锁,必须通过unlock()方法释放锁

实现方式

  • 集成Thread类创建多线程
  • 实现Runnable接口创建多线程
  • 实现Callable接口通过FutureTask包装器来创建Thread线程
  • 通过线程池创建多线程

线程通信方式

  • 传统线程通信synchronized + wait + notify
  • 使用Condition控制线程通信lock + condition + await + signal
  • 使用阻塞队列(BlockingQueue)控制线程通信

线程调度

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值