java并发
枷锁编程
京东Java开发工程师一枚,枷锁编程与你共同成长,欢迎大家点赞,收藏,关注!!!
展开
-
关于乐观锁和悲观锁(让你成为大聪明)
一、背景知识 锁的作用:多个线程并发操作同一数据,保证数据的准确性。也就是说,多线程情况下,每个线程的执行结果和单线程时相同。 下面要说的乐观锁、悲观锁都是一种概念,并不是具体实现。 二、乐观锁 概念:线程读取数据时并不会上锁,但会保留当前数据的值为原有值,之后在进行修改前用原有值和现在的值进行对比,如果相同可以修改。 使用场景:读操作较多,写操作较少。 实现:CAS操作 CAS中文是比较并替换,使用三个基本操作数,内存地址V,预期值A,修改值B。 线程先去内存地址读取数据作为预期值,在回来修改数据前。先比原创 2021-07-25 01:55:37 · 182 阅读 · 0 评论 -
死锁(多线程并发java)
一、死锁概念 多个线程争夺资源,全部无法执行,进入一种僵局。 二、死锁产生的四个必要条件 1.互斥条件:资源被线程占用后,其他线程无法占用。 2.请求和保持条件:一个线程因请求资源堵塞时,保持自己的资源。 3.不剥夺条件:一个线程获得的资源不能被剥夺,只能主动释放。 4.环路等待条件:线程之间形成一种等待资源的循环。 三、实现一个死锁 四、如何解决死锁 破坏产生死锁的四个条件 1.破坏互斥条件:无法破坏,锁本身就是互斥的。 2.破坏请求与保持条件:一次申请所有资源,避免请求。 3.破坏不剥夺条件:线程在占有原创 2021-07-24 02:03:32 · 101 阅读 · 0 评论