文章目录
2.并发编程的其他知识
2.1什么是多线程并发编程
2.1.1区分并行和并发
- 并行:在单位时间内多个任务同时执行
- 并发:同一个时间段内多个任务同时执行,
- 在单CPU的时代,多个任务都是并发执行的,这是因为单个CPU同时只能执行一个任务。
- 当一个任务占用CPU运行时,其他任务就会被挂起,当占用CPU的任务时间片用完后,会把CPU让给其他任务来使用
- 在单CPU时代多线程编程是没有太大意义的,并且线程间频繁的上下文切换还会带来额外开销
2.2为什么要进行多线程并发编程
- 多核CPU时代的到来打破了单核CPU对多线程效能的限制。
- 多个CPU意味着每个线程可以使用自己的CPU运行,这减少了线程上下文切换的开销,大大提高了运行性能
2.3Java内存模型
- Java 内存模型(Java Memory Model)是一种抽象的模型,简称 JMM,要用来定义多线程中变量的访问规则
- Java内存模型规定:线程之间的共享变量存储在主内存中,每个线程都有一个私有的本地内存,本地内存中存储了共享变量的副本,用来进行线程内部的读写操作
- 当一个线程更改了本地内存中共享变量的副本后,它需要将这些更改刷新到主内存中,以确保其他线程可以看到这些更改
- 当一个线程需要读取共享变量时,它可能首先从本地内存中读取。如果本地内存中的副本是过时的,线程将从主内存中重新加载共享变量的最新值到本地内存中
- 作用:用来解决变量的可见性、有序性和原子性问题,确保在并发环境中安全地访问共享变量
2.4并发编程三大特性
- 原子性:原子性指的是一个操作是不可分割、不可中断的,要么全部执行并且执行的过程不会被任何因素打断,要么就全不执行。
- 可见性:可见性指的是一个线程修改了某一个共享变量的值时,其它线程能够立即知道这个修改。
- 有序性:有序性指的是对于一个线程的执行代码,从前往后依次执行,单线程下可以认为程序是有序的,但是并发时有可能会发生指令重排。
- 原子性使用 synchronized 关键字实现
- 可见性、有序性使用 volatile 关键字实现
2.5Java中的 synchronized 关键字
2.5.1使用方法
- synchronized 可以用在方法和同步代码块中