![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发编程
文章平均质量分 69
讲述并发编程常见的知识
向骄阳
又菜又爱学的程序员
展开
-
并发编程之内存屏障
一、 定义最直观的就是:你如果不想要两行代码进行重排序,那么就在两行代码之间加一个屏障,这个屏障就相当于一个标记,那么jvm在执行到这行代码时,看到这个屏障,就不会重排序了二、内存屏障的种类JVM层面的内存屏障在JSR规范中定义了4种内存屏障:LoadLoad屏障:(指令Load1; LoadLoad; Load2),在Load2及后续读取操作要读取的数据被访问前,保证Load1要读取的数据被读取完毕。LoadStore屏障:(指令Load1; LoadStore; ..原创 2022-05-08 16:48:22 · 1298 阅读 · 1 评论 -
并发编程之volatile和lock前缀指令
volatile的特性1、可见性1.1 定义可见性:对一个volatile变量的读,总是能看到(任意线程)对这个volatile变量最后的写入1.2 volatile可见性实现原理JMM内存交互层面实现volatile修饰的变量的read、load、use操作和assign、store、write必须是连续的,即修改后必须立即同步回主内存,使用时必须从主内存刷新,由此保证volatile变量操作对多线程的可见性。硬件层面实现通过lock前缀指令,会锁定变量缓存行区..原创 2022-05-07 21:32:05 · 2005 阅读 · 1 评论 -
并发编程之并发三大特性:原子性,可见性,有序性
并发三大特性概览并发编程Bug的源头:可见性、原子性和有序性问题1、可见性1.1 定义当一个线程修改了共享变量的值,其他线程能够看到被修改的值,这就是可见性。1.2 Java 内存模型如何保证可见性Java 内存模型就是通过在变量修改后将新值同步回主内存,在变量读取前从主内存刷新新的变量值,这种依赖主内存作为传递媒介的方法来实现可见性的。1.3 如何保证可见性总共就两大类:(1)一个是内存屏障。JVM层面:storeload硬件层面:lock前缀指原创 2022-05-07 18:30:28 · 741 阅读 · 0 评论 -
并发和并行的区别
1、并行并行(parallel):指在同一时刻,有多条指令在多个处理器上同时执行,所以无论从微观还是从宏观来看,二者都是一起执行的。2、并发并发(concurrency):指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行。最开始我们系统都是单核处理器,只能做一件事,后来就引入了时间片,交替执行。用户几乎感知不到,因为大概10ms-.原创 2022-05-07 17:55:37 · 18496 阅读 · 0 评论