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