Bug:StampedLock鐨勪腑鏂棶棰樺鑷碈PU鐖嗘弧-鍗氬-浜戞爾紺懼尯-闃塊噷浜?
StampedLock浣滀負JAVA8涓嚭鐜扮殑鏂板瀷閿侊紝寰堝彲鑳藉湪澶у鏁板満鏅兘鍙互鏇誇唬ReentrantReadWriteLock銆傚畠瀵逛簬璿?鍐欓兘鎻愪緵浜嗗洓涓帴鍙?鎹㈡垚write涓哄啓閿?锛?/p>
- readLock()
- tryReadLock()
- tryReadLock(long time, TimeUnit unit)
- readLockInterruptibly()
榪欏嚑涓柟娉曞搴旂殑璿箟涓猴細
- 鑾峰彇璿婚攣锛堥樆濉烇紝涓嶅搷搴斾腑鏂級
- 鑾峰彇璿婚攣锛堢珛鍗籌級
- 闄愭椂鑾峰彇璿婚攣锛堝搷搴斾腑鏂級
- 鑾峰彇璿婚攣锛堥樆濉烇紝鍝嶅簲涓柇锛?/li>
鐒惰€屽湪readLock鏂規硶锛堝嵆涓嶅搷搴斾腑鏂級涓瓨鍦ㄩ棶棰?write鐨勭増鏈篃鏄?锛岃瀵烠PU浣跨敤鐜囷紝鎵ц浠ヤ笅浠g爜锛?/div>
01 |
public 聽class 聽TestStampedLock {
|
02 |
聽聽聽聽 public 聽static 聽void 聽main(String[] args)聽 throws 聽InterruptedException{
|
03 |
聽聽聽聽 final 聽StampedLock lock =聽 new 聽StampedLock();
|
04 |
聽聽聽聽 new 聽Thread(){
|
05 |
聽聽聽聽聽聽聽 public 聽void 聽run(){
|
06 |
聽聽聽聽聽聽聽 long 聽readLong = lock.writeLock();
|
07 |
聽聽聽聽聽聽聽 LockSupport.parkNanos(6100000000L);
|
08 |
聽聽聽聽聽聽聽 lock.unlockWrite(readLong);
|
09 |
聽聽聽聽聽 }
|
10 |
聽聽聽聽 }.start();
|
11 |
聽聽聽聽 Thread.sleep( 100 );
|
12 |
聽聽聽聽 for (聽 int 聽i =聽 0 ; i <聽 3 ; ++i)
|
13 |
聽聽聽聽聽聽聽 new 聽Thread( new 聽OccupiedCPUReadThread(lock)).start();
|
14 |
聽聽聽聽 }
|
15 |
聽聽聽聽 private 聽static 聽class 聽OccupiedCPUReadThread聽 implements 聽Runnable{
|
16 |
聽聽聽聽聽聽聽聽 private 聽StampedLock lock;
|
17 |
聽聽聽聽聽聽聽聽 public 聽OccupiedCPUReadThread(StampedLock lock){
|
18 |
聽聽聽聽聽聽聽聽聽聽聽聽 this .lock = lock;
|
19 |
聽聽聽聽聽聽聽聽 }
|
20 |
聽聽聽聽聽聽聽聽 public 聽void 聽run(){
|
21 |
聽聽聽聽聽聽聽聽聽聽聽聽 Thread.currentThread().interrupt();
|
22 |
聽聽聽聽聽聽聽聽聽聽聽聽 long 聽lockr = lock.readLock();
|
23 |
聽聽聽聽聽聽聽聽聽聽聽聽 System.out.println(Thread.currentThread().getName() +聽 " get read lock" );
|
24 |
聽聽聽聽聽聽聽聽聽聽聽聽 lock.unlockRead(lockr);
|
25 |
聽聽聽聽聽聽聽聽 }
|
26 |
聽聽聽聽 }
|
27 |
} |
鍏堝紑鍚竴涓嚎紼嬭幏鍙栧啓閿佸苟淇濇寔6縐掞紝鍐嶅紑鍚笁涓甫鐫€涓柇鐘舵€佺殑綰跨▼鍘昏幏鍙栬閿侊紙readLock鏂規硶锛夛紝緇撴灉鏄?涓牳蹇冭鍗犳嵁浜嗚繎6縐掋€?/div>
鍘熷洜鍦ㄤ簬娌℃湁浣跨敤淇濆瓨/澶嶅師涓柇鐘舵€?/strong>鐨勬満鍒訛紝閫氳繃hack婧愮爜锛屾彃鍏ヤ繚瀛樹腑鏂拰榪斿洖鍓嶆仮澶嶄腑鏂殑鐩稿叧浠g爜鍗衝彲淇锛?/div>
1 |
boolean 聽interrupted聽=聽 false ;
|
1 |
if (interrupted)
|
2 |
聽聽聽聽 Thread.currentThread().interrupt();
|
3 |
return 聽ns;
|
1 |
if (Thread.interrupted()){
|
2 |
聽聽聽聽 if (interruptible)
|
3 |
聽聽聽聽聽聽聽聽 return 聽cancelWaiter(node, p,聽 true );
|
4 |
聽聽聽聽 else
|
5 |
聽聽聽聽聽聽聽聽 interrupted =聽 true ;
|
6 |
} |
- 杞澆鑷?a href="https://ifeve.com/" target="_blank" >騫跺彂緙栫▼緗?- ifeve.com

鐢ㄤ簯鏍栫ぞ鍖篈PP锛岃垝鏈崀
銆愪簯鏍栧揩璁€戝浣曞簲鑱樹簰鑱旂綉鍏徃锛屾嬁鍒伴珮鍚狾ffer锛熻亴鍦鴻彍楦熷浣曞揩閫熸垚闀匡紵闃塊噷瀛﹂暱涓轟綘鏀嫑锛屽湪綰跨洿鎾紝瓚充笉鍑烘埛鐪嬬璿€锛孖T鏂板叺蹇潵鍚э紒 璿︽儏璿風偣鍑?/a>
鐩稿叧鏂囩珷
緗戝弸璿勮
- 鍗氫富鍏朵粬鏂囩珷
- 鐩稿叧璿濋
- 鐗堟潈澹版槑
鏈ぞ鍖哄唴瀹圭敱浜掕仈緗戠敤鎴瘋嚜鍙戣礎鐚紝鏈ぞ鍖轟笉鎷ユ湁鎵€鏈夋潈锛屼篃涓嶆壙鎷呯溮鍏蟲硶寰嬭矗浠匯€傚鏋滄偍鍙戠幇鏈ぞ鍖轟腑鏈夋秹瀚屾妱琚殑鍐呭锛屾榪庡彂閫侀偖浠訛細zhaoyunqi@list.alibaba-inc.com 榪涜涓炬姤锛屽苟鎻愪緵鐩稿叧璿佹嵁锛屼竴緇忔煡瀹烇紝鏈ぞ鍖哄皢絝嬪埢鍒犻櫎娑夊珜渚墊潈鍐呭銆?
最後更新:2017-05-23 18:02:56