
java锁
骑小猪拱白菜
自强不息,不努力,你都不知道自己有多大能力!
希望能找个技术大佬,许多技术自学还是没有实际作用,找个大佬偶尔问问技术!
展开
-
锁升级过程-」无锁、偏向锁、轻量级锁
a、对象无锁加Synchronizedh或别的加锁机制升级为偏向锁后,只有一个线程进入时,会直接给第一个线程进入,并贴上标签,代表所被其占有了,待任务执行完后,释放该锁。b、当有多个线程一起来竞争该锁时,会拆下该标签,每个线程进行CAS操作,将自己栈中的Lock Record与所对象的进行比对,若一致,没有被其他线程改过,则持有这把锁,否则继续进行cas操作。...原创 2020-07-05 02:07:56 · 305 阅读 · 0 评论 -
Java中的wait()和sleep()你了解吗?
1、所属类不同sleep方法是Thread类的静态方法,在任何地方都可以调用Thread.sleep()。wait方法是Object类的成员方法,只能在同步上下文中调用。2、作用不同sleep方法,让该线程睡眠固定时间,并不会释放锁,唤醒方法:超时后或interrupt()wait方法,让该线程处于阻塞状态,会释放锁,唤醒方法:另一线程调用notify或者notifyAll才可以唤醒。3、思考???(1)线程A在执行过程中需要等待某一段时间后再继续执行,使用什么方法?(2)线原创 2020-06-28 14:53:06 · 136 阅读 · 0 评论 -
线程间通信wait、notify、notifyAll!!!
假设线程1需要等待线程2执行之后才执行,实现方法有多种,最佳的实现方法是线程2执行后,通知线程1可以执行了。这就引出了Object类中的wait()、notify()、notifyAll()方法。1、wait()当2个线程1执行时,调用了wait(),那么2个线程1会放弃已抢到的锁,进入阻塞状态。2、notify、notifyAll当线程2执行notify时,会唤醒2个线程中的某一个,重新回到就绪状态。若是执行notifyAll后,会唤醒所有线程1进入就绪状态。测试代码如下:测试一、原创 2020-06-27 18:54:34 · 153 阅读 · 0 评论 -
Java中锁的学习-p2-CAS中ABA问题
上篇文章中,讲到了CAS自旋的过程,最后遗留了一个问题,自旋过程中,进行取值比较时,可能会产生ABA问题。什么是ABA问题?ABA问题就是在取值比较时,取到的值不是原来的值,但是值是相等的也就是在操作过程中,有别的线程先进行了操作。举个例子: 1、线程A进入,取到值为0,记录为R; 2、线程B进入,取到值为0,记录为R1; 3、线程B取值比较并修改为1; 4、线程C进入,取到值为1,记录为R2,并修改值为0; 5、线程A再次取值比较,...原创 2020-06-07 17:07:25 · 251 阅读 · 0 评论 -
你真的了解JAVA中的锁嘛?-p1-CAS原理
挣扎徘徊了很久,还是决定抛开主流框架,系统的学习一下各大底层,为什么呢?面试了许多公司,但是其实真正问的没有多少,但是一旦问了,那么就有许多问题了。不管底层对日常业务开发是否有帮助,总之来说,面试和提升自我,都是你必须要学习的理由。所以决定一遍学习,一边记录。学习当然得从基础开始,今天所说的是锁中的CAS流程。1、什么是CAS?CAS是Compare and swp或是Compare and exchange,也就是比较和交换,是基于锁的操作,也是乐观锁。简单说一下,悲观锁是锁住该资源.原创 2020-06-07 16:35:29 · 190 阅读 · 0 评论