
并发编程
NJUdudu
这个作者很懒,什么都没留下…
展开
-
CAS
一、CAS简介 比较并交换(compare and swap, CAS),是原子操作的一种,可用于在多线程编程中实现不被打断的数据交换操作,从而避免多线程同时改写某一数据时由于执行顺序不确定性以及中断的不可预知性产生的数据不一致问题。 该操作通过将内存中的值与指定数据进行比较,当数值一样时将内存中的数据替换为新的值。 CAS算法涉及到三个操作数: 需要读写的内存值 V。 进行比较的值 A。...原创 2020-03-30 20:06:05 · 567 阅读 · 0 评论 -
synchronized关键字
https://tech.meituan.com/2018/11/15/java-lock.html https://juejin.im/post/5ae6dc04f265da0ba351d3ff https://leejay.top/posts/Synchronized%E9%94%81%E8%AF%A6%E8%A7%A3/原创 2020-02-14 15:27:15 · 338 阅读 · 0 评论 -
happen-before原则和as-if-serial语义
一、as-if-serial as-if-serial语义的意思是:不管怎么重排序(编译器和处理器为了提供并行度),(单线程)程序的执行结果不能被改变。编译器,runtime和处理器都必须遵守as-if-serial语义。as-if-serial语义把单线程程序保护了起来,遵守as-if-serial语义的编译器,runtime和处理器共同为编写单线程程序的程序员创建了一个幻觉:单线程程序是按...原创 2020-01-21 16:09:44 · 755 阅读 · 0 评论 -
java中sleep和wait的区别
sleep()方法 wait()方法 sleep()使当前线程进入停滞状态(阻塞当前线程),让出CUP的使用、目的是不让当前线程独自霸占该进程所获的CPU资源,以留一定时间给其他线程执行的机会; sleep()是Thread类的Static(静态)的方法;因此他不能改变对象的机锁,所以当在一个Synchronized块中调用Sleep()方法是,线程虽然休眠了,但是对象...转载 2020-01-20 16:52:14 · 151 阅读 · 0 评论 -
java线程死锁/死循环分析方法
例程: package com.sample; public class Concurrent { private static String resource_a = "A"; private static String resource_b = "B"; public static void main(String[] args) { deadLoc...原创 2020-01-19 21:14:18 · 1277 阅读 · 0 评论 -
volatile关键字
一、volatile的作用 在并发编程中,我们通常会遇到以下三个问题:原子性问题,可见性问题,有序性问题。我们先看具体看一下这三个概念: 原子性:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。 可见性:可见性是指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。 有序性:即程序执行的顺序按照代码的先后顺序执行。 通常情况...原创 2020-01-13 17:07:28 · 183 阅读 · 1 评论