【Java并发编程之美 | 第二篇】并发编程的其他知识(并行/并发、JMM、三大特性、synchronized/volatile关键字、CAS操作)

在这里插入图片描述

2.并发编程的其他知识

2.1什么是多线程并发编程

2.1.1区分并行和并发

  1. 并行:在单位时间内多个任务同时执行
  2. 并发:同一个时间段内多个任务同时执行,
    1. 在单CPU的时代,多个任务都是并发执行的,这是因为单个CPU同时只能执行一个任务。
    2. 当一个任务占用CPU运行时,其他任务就会被挂起,当占用CPU的任务时间片用完后,会把CPU让给其他任务来使用
    3. 在单CPU时代多线程编程是没有太大意义的,并且线程间频繁的上下文切换还会带来额外开销

2.2为什么要进行多线程并发编程

  1. 多核CPU时代的到来打破了单核CPU对多线程效能的限制。
  2. 多个CPU意味着每个线程可以使用自己的CPU运行,这减少了线程上下文切换的开销,大大提高了运行性能

2.3Java内存模型

  1. Java 内存模型(Java Memory Model)是一种抽象的模型,简称 JMM,要用来定义多线程中变量的访问规则
  2. Java内存模型规定:线程之间的共享变量存储在主内存中,每个线程都有一个私有的本地内存,本地内存中存储了共享变量的副本,用来进行线程内部的读写操作
    1. 当一个线程更改了本地内存中共享变量的副本后,它需要将这些更改刷新到主内存中,以确保其他线程可以看到这些更改
    2. 当一个线程需要读取共享变量时,它可能首先从本地内存中读取。如果本地内存中的副本是过时的,线程将从主内存中重新加载共享变量的最新值到本地内存中
  3. 作用:用来解决变量的可见性、有序性和原子性问题,确保在并发环境中安全地访问共享变量

2.4并发编程三大特性

  1. 原子性:原子性指的是一个操作是不可分割、不可中断的,要么全部执行并且执行的过程不会被任何因素打断,要么就全不执行。
  2. 可见性:可见性指的是一个线程修改了某一个共享变量的值时,其它线程能够立即知道这个修改。
  3. 有序性:有序性指的是对于一个线程的执行代码,从前往后依次执行,单线程下可以认为程序是有序的,但是并发时有可能会发生指令重排。
  4. 原子性使用 synchronized 关键字实现
  5. 可见性、有序性使用 volatile 关键字实现

2.5Java中的 synchronized 关键字

2.5.1使用方法

  1. synchronized 可以用在方法和同步代码块中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

来自梦里的一条鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值