博客专栏推荐
-
1176555次
-
121792次
-
56674次
-
29171次
本月博客排行
年度博客排行
-
第1名
小taomi_77 -
第2名
大家都说我很棒 -
第3名
- kaizi1992
- zw7534313
- liyihz2008
- sichunli_030
- surmounting
- xiangjie88
- 腾讯优测1
- wallimn
- dbagirl
- hbxflihua
- zysnba
- wy_19921005
- zhangdaiscott
- ning2-eye
- 青否云后端云
- itdatacenter
- e_e
- alsmile
- gaozzsoft
- fantaxy025025
- johnsmith9th
- chinahuyong
- luxurioust
- 淡看人生
- jywhltj
- leslie26
- mukeliang728
- cuityang
- jveqi
- hellohank
- weiyides
- robotmen
- zlr
- appalese
- cash
- hanbaohong
- zhaoshijie
- jackpot1234
- lzyfn123
- arpenker
- ssydxa219
- zhangyi0618
- lyongq04
- xpenxpen
- liunancun
- java-007
最新文章列表
什么情况下java程序会产生死锁?如何定位和修复死锁
死锁是一种特定的程序状态,在实体之间,由于循环依赖导致彼此一直处于等待之中,没有任何个体可以继续前进。死锁不仅仅是在线程之间会发生,存在资源独占的进程之间同样也可能出现死锁。通常来说,我们大多是聚焦在多线程场景中的死锁,指两个或多个线程之间,由于相互持有对方需要的锁,而永久处于阻塞的状态。
定位死锁最常见的方式就是利用jstack等工具获取线程栈,然后定位相互之间的依赖关系,进而找到死锁 ...
看本文建议结合源码
首先来看看reentrantlock的构造方法,它的构造方法有两个,如所示:
public reentrantlock() {
sync = new nonfairsync();
}
public reentrantlock(booleanfair
有499人浏览
2018-04-26 18:09
web编程开发中,会遇到资源争用的情况。举例:
有多个商品,商品抢单,每个商品都有数量限制。
但凡遇到此类问题,自古以来,就有两种解决方式:1、使用锁,2、使用队列。
使用任意一个就可以。
使用队列的方式最为简单,不考虑加锁。也无需使用数据库的锁。
把所有的请求都放入队列,然后把队列处理的结果返回给客户端。每次都查询商品的剩余数量是否为0,为0就拒绝请求。
如果商品太多,可以按商品大类分成 ...
有4082人浏览
2018-01-24 11:16
锁在多线程中是必不可少的,他给多线程提供了同步的功能,让多线程可以互斥的执行同步块,并具有可见性。
本文将从happens-before关系出发,结合reentranlock源码,如何用内存屏障、cas操作、lock指令实现锁的功能。
锁的happens-before关系
happens-before规则
程序顺序规则:在一个线程中,前面的操作happens-before后面的 ...
有2706人浏览
2017-12-26 14:23
乐观锁
乐观锁是一种思想,是给数据库表添加一个字段(数据库默认会给表添加一个版本号字段),在更新数据之前会先读取这个字段,更新缓存数据到表中时,再去检查这个字段是否在此期间被其他程序操作过,
如果这个字段被修改过,那么就拒绝更新,此次操作失败。
悲观锁是一种读写期间阻止其操作修改的锁,
乐观锁和悲观锁适用主要还是看业务场景,而不能天真的认为一个好于另一个,乐观锁主要用于写操作少读操作多的场 ...
有354人浏览
2017-09-14 14:53
其他重要参考
http://blog.csdn.net/xifeijian/article/details/20313977#t10
1 背景 1
有650人浏览
2017-05-14 16:41
常见的线程状态:
runnable:正在执行的线程
注意:这里执行是针对jvm来说的,并非真的在cpu上执行,这要看操作系统处理器是否有机会
blocked:阻塞的线程
注意:阻塞的线程一般是拿不到监视器锁(a monitor lock),比如:synchronized block/method,reentrantlock.lock()
jstack一般显示为:
& ...
有2478人浏览
2017-03-31 14:42
« 上一页 1 …