多线程
gkmmg
小菜鸡
展开
-
java中volatile关键字
volatile提供可见性支持,但是不能控制并发。在说volatile关键字之前,要先提一下JMM(java内存模型)对java线程之间通信的控制,线程之间的共享变量存储在主内存(Main Memory)中,每个线程都有一个私有的本地内存(Local Memory),本地内存中存储了该线程以读/写共享变量的副本。本地内存是JMM的一个抽象概念,并不真实存在。它涵盖了缓存、写缓冲区、寄存器以及其...原创 2018-04-06 17:58:01 · 152 阅读 · 0 评论 -
JAVA中对CAS算法的应用
CAS算法:Compare and Swap比较并交换。总共由三个操作数,一个内存值v,一个线程本地内存旧值a(期望操作前的值)和一个新值b,在操作期间先拿旧值a和内存值v比较有没有发生变化,如果没有发生变化,才能内存值v更新成新值b,发生了变化则不交换。循环CAS算法则是不停的执行CAS操作。java.util.concurrent.atomic包下的原子变量类型,比如AtomicInteger...原创 2018-05-02 20:57:33 · 2016 阅读 · 0 评论 -
java并发控制常用api
sleep(long millis)在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),属于Thread类中的方法。在调用sleep()方法的过程中,线程不会释放对象锁。依然持有着锁入眠,也就是说如果有synchronized同步快,其他线程仍然不能访问共享数据。等待睡眠时间到了之后进入线程进入就绪状态。sleep()可以使低优先级的线程得到执行的机会,当然也可以让同优先级、高优先级的线程有执行...原创 2018-04-26 10:29:25 · 453 阅读 · 0 评论 -
在实际工作中理解乐观锁和悲观锁
先把需求提出:在用户提交表单数据后,保存表单数据之前,通过切面手段或硬编码生成一个表单编号放入表单数据中。 生成编号的规则是A3501047800002009120003A+12位单位编码+年月+四位顺序号(按照A+12位单位编码+年月去查询目前的最大值,然后+1) 如果两个线程A、B同时查出上一个编号是A3501047800002009120003,都做了+1操作,如果数据库表单...原创 2018-05-24 14:47:13 · 471 阅读 · 0 评论