自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(7)
  • 资源 (1)
  • 收藏
  • 关注

原创 synchronized

synchronized和Lock之间的关系1、synchronized用于少量同步上,ReentrantLock用于大量同步。2、synchronized是在JVM层面上实现同步的,系统可以监控锁;ReentrantLock使用代码实现。3、synchronized线程执行发生异常,JVM会让线程释放锁;ReentranLock在finally中必须释放锁,不然容易造成线程死锁。4、synchronized当线程a获得锁的时候,线程b会处于等待状态;ReentranLock有锁投票,定时锁等候和

2020-06-26 18:45:31 127

原创 synchronized是如何实现的?

在再有人问你Java内存模型是什么,就把这篇文章发给他。中我们曾经介绍过,Java语言为了解决并发编程中存在的原子性、可见性和有序性问题,提供了一系列和并发处理相关的关键字,比如synchronized、volatile、final、concurren包等。在《深入理解Java虚拟机》中,有这样一段话:synchronized关键字在需要原子性、可见性和有序性这三种特性的时候都可以作为其中一种解决方案,看起来是“万能”的。的确,大部分并发控制操作都能使用synchronized来完成。海明威

2020-06-26 18:40:43 401 1

原创 死锁

死锁的定义在多道程序系统中,由于多个进程的并发执行,改善了系统资源的利用率并提高了系统 的处理能力。然而,多个进程的并发执行也带来了新的问题——死锁。所谓死锁是指多个进 程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进。下面我们通过一些实例来说明死锁现象。先看生活中的一个实例,在一条河上有一座桥,桥面很窄,只能容纳一辆汽车通行。如 果有两辆汽车分别从桥的左右两端驶上该桥,则会出现下述的冲突情况。此时,左边的汽车 占有了桥面左边的一段,要想过桥还需等待右边的汽车让出桥面

2020-06-26 18:40:13 119

原创 什么是死锁

什么是死锁java级别死锁一、什么是死锁死锁不仅在个人学习中,甚至在开发中也并不常见。但是一旦出现死锁,后果将非常严重。 首先什么是死锁呢?打个比方,就好像有两个人打架,互相限制住了(锁住,抱住)彼此一样,互相动弹不得,而且互相欧气,你不松手我就不松手。好了谁也动弹不得。 在多线程的环境下,势必会对资源进行抢夺。当两个线程锁住了当前资源,但都需要对方的资源才能进行下一步操作,这个时候两方就会一直等待对方的资源释放。这就形成了死锁。这些永远在互相等待的进程称为死锁进程。那么我们来总结一下死锁产

2020-06-26 18:37:43 264

原创 锁优化

在JDK1.6以后,为了减少消耗,锁进行了很多的升级。并且有了四种状态,从低到高无锁状态偏向锁状态轻量级锁状态重量级锁状态下面就介绍一下这四种不同等级的锁不同等级间的锁可以进行升级,但是不能进行降级对象内存布局在讲锁之前我们应该了解对象的内存布局,因为后面锁的判定时需要用到,该内容可以看我的这篇文章,对象的内存布局,重点看对象头中的运行时数据(Mark Word)看了这个你应该知道,Mark Word(以后简称MW) 会随着 标志位的变化而变化MW变化先把他放出来,免得等

2020-06-26 18:36:54 143

原创 无锁

什么是CAS?在计算机科学中,比较和交换(Conmpare And Swap)是用于实现多线程同步的原子指令。 它将内存位置的内容与给定值进行比较,只有在相同的情况下,将该内存位置的内容修改为新的给定值。 这是作为单个原子操作完成的。 原子性保证新值基于最新信息计算; 如果该值在同一时间被另一个线程更新,则写入将失败。 操作结果必须说明是否进行替换; 这可以通过一个简单的布尔响应(这个变体通常称为比较和设置),或通过返回从内存位置读取的值来完成(摘自维基本科)我的理解:(1)线程1读取出指.

2020-06-26 18:31:31 149

原创

定义可重入锁,也叫做递归锁,指的是在同一线程内,外层函数获得锁之后,内层递归函数仍然可以获取到该锁。换一种说法:同一个线程再次进入同步代码时,可以使用自己已获取到的锁。作用防止在同一线程中多次获取锁而导致死锁发生。LockSupport.unpark()的阻塞锁。 该例子是将CLH锁修改而成。阻塞锁的优势在于,阻塞的线程不会占用cpu时间, 不会导致 CPu占用率过高,但进入时间以及恢复时间都要比自旋锁略慢。在竞争激烈的情况下 阻塞锁的性能要明显高于 自旋锁。乐观锁

2020-06-26 18:30:19 138

RachelGods.zip

http://hollischuang.gitee.io/tobetopjavaer/#/menu

2020-06-16

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除