
笔记
文章平均质量分 50
梦里梦外都在coding
这个作者很懒,什么都没留下…
展开
-
JDK1.5之前和之后实现方法同步的方式
在jdk1.5之前,我们想要实现线程同步,只能通过synchronized关键字这一种方式来达成,底层,JAVA也是通过synchronized关键字来做到数据的原子性的,synchronized关键字是jvm实现的一种内置锁,从底层角度来说,这种锁得获取和释放是由jvm帮助我们隐式实现的从jdk1.5开始,并发包引入了lock锁,lock同步锁是基于JAVA来实现的,因此锁的获取和释放都是通过JAVA代码来实现和控制的,然而synchronized是基于底层操作系统Mutex lock来实现的,每次对锁原创 2020-08-04 21:43:22 · 311 阅读 · 0 评论 -
jvm实现同步与自旋
jvm中的同步是基于进入与退出监视对象(管程对象,Monitor)来实现的,每个对象实例都会有一个Monitor对象,Monitor对象会和JAVA对象一同创建并销毁,Monitor对象是由c++来实现的当多个线程同时访问一段同步代码时,这些线程会被放到一个EntryList集合中,处于阻塞状态的线程都会被放到该列表中,接下来,当线程获取到对象的Monitor时,Monitor是依赖于底层操作系统的mutex lock来实现互斥的。线程获取mutex成功,就会持有该mutex,这时其他线程无法再获取如果原创 2020-08-03 21:51:03 · 236 阅读 · 0 评论 -
synchronized方法
对于synchronized关键字修饰方法来说。并没有出现monitorenter和monitorexit指令。而是出现了一个ACC_SYNCHRONIZED标志。jvm使用这个标志区分一个方法是否为同步方法,当方法被调用,调用指令会检查方法是否有该标志,如果有,那么执行线程将会先持有方法所在对象的的monitor对象,然后再去执行方法体,在方法执行期间,其他任何线程均无法再获取到这个monitor对象,当线程执行完该方法后。它会释放掉这个mo...原创 2020-08-03 21:35:54 · 163 阅读 · 0 评论 -
wait,notify,notifyall方法的总结
wait方法:在调用该方法时候,线程必须持有调用对象的锁,当调用后,线程就会释放该对象的锁,在调用thread的sleep方法的时候。线程是不会释放对象的锁的。关于wait,notify和notifyall方法的总结:1,当调用wait时,首先需要确保调用了wait方法的线程已经持有了对象的锁2,当调用wait后。该线程就会释放掉对象的锁,然后进入等待状态(waitset)3,当线程调用了wait后进入到等待状态时,它就可以等待其他线程调用相同对象的notify或者notifyall方法来使得自己被原创 2020-08-03 21:23:07 · 201 阅读 · 0 评论 -
CMS收集器
以获得最短回收时间为目标,多数应用于互联网站或者b/s系统的服务器端上基于“标记-清除”算法实现的,整个过程分为4个步骤:初始标记并发标记重新标记并发清除1,其中初始标记,重新标记这两个步骤仍然需要 STW2,初始标记只是标记一下GC Roots能直接关联到的对象,速度很快3,并发标记阶段是进行GC Roots Tracing的古城4,重新标记阶段是为了修正并...原创 2020-03-14 14:15:51 · 191 阅读 · 0 评论