锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲av中文无码乱人伦在线观看 ,亚洲精品国产高清不卡在线,亚洲AV无码久久精品蜜桃http://m.tkk7.com/jinfeng_wang/category/55142.htmlG-G-S,D-D-U!zh-cnWed, 14 Dec 2016 13:27:19 GMTWed, 14 Dec 2016 13:27:19 GMT60JVM GChttp://m.tkk7.com/jinfeng_wang/archive/2016/12/14/432095.htmljinfeng_wangjinfeng_wangWed, 14 Dec 2016 08:06:00 GMThttp://m.tkk7.com/jinfeng_wang/archive/2016/12/14/432095.htmlhttp://m.tkk7.com/jinfeng_wang/comments/432095.htmlhttp://m.tkk7.com/jinfeng_wang/archive/2016/12/14/432095.html#Feedback0http://m.tkk7.com/jinfeng_wang/comments/commentRss/432095.htmlhttp://m.tkk7.com/jinfeng_wang/services/trackbacks/432095.html闃呰鍏ㄦ枃

jinfeng_wang 2016-12-14 16:06 鍙戣〃璇勮
]]>
Synchronized涓嶭ock閿佺殑鍖哄埆http://m.tkk7.com/jinfeng_wang/archive/2016/12/14/432090.htmljinfeng_wangjinfeng_wangWed, 14 Dec 2016 06:26:00 GMThttp://m.tkk7.com/jinfeng_wang/archive/2016/12/14/432090.htmlhttp://m.tkk7.com/jinfeng_wang/comments/432090.htmlhttp://m.tkk7.com/jinfeng_wang/archive/2016/12/14/432090.html#Feedback0http://m.tkk7.com/jinfeng_wang/comments/commentRss/432090.htmlhttp://m.tkk7.com/jinfeng_wang/services/trackbacks/432090.htmlhttp://www.tuicool.com/articles/2aeUBfe

妤斿瓙

鏈榪戜竴鐩撮兘姣旇緝蹇欙紝娌℃湁鏃墮棿鍐欏崥瀹簡銆備粖澶╅」鐩粓浜庣伆搴︿簡錛屽彲浠ユ湁鏃墮棿鍐欏啓鍗氬錛岀湅鐪嬫枃绔犱簡錛侊紒錛?#9582;(╯▽╰)╭

浠婂ぉ瑕佸啓鐨勪富棰樻槸Java鐨勫熀紜鐭ヨ瘑錛孲ynchronized鍜孡ock閿佺殑鍖哄埆錛侊紒錛?/p>

鍖哄埆

1銆丷eentrantLock鎷ユ湁Synchronized鐩稿悓鐨勫茍鍙戞у拰鍐呭瓨璇箟錛屾澶栬繕澶氫簡 閿佹姇紲紝瀹氭椂閿佺瓑鍊欏拰涓柇閿佺瓑鍊欑瓑鐗規с?/p>

綰跨▼A鍜孊閮借鑾峰彇瀵硅薄O鐨勯攣瀹氾紝鍋囪A鑾峰彇浜嗗璞閿侊紝B灝嗙瓑寰匒閲婃斁瀵筄鐨勯攣瀹?/p>

濡傛灉浣跨敤 synchronized 錛屽鏋淎涓嶉噴鏀撅紝B灝嗕竴鐩寸瓑涓嬪幓錛屼笉鑳借涓柇

濡傛灉 浣跨敤ReentrantLock錛屽鏋淎涓嶉噴鏀撅紝鍙互浣緽鍦ㄧ瓑寰呬簡瓚沖闀跨殑鏃墮棿浠ュ悗錛屼腑鏂瓑寰咃紝鑰屽共鍒殑浜嬫儏

ReentrantLock鑾峰彇閿佸畾涓庝笁縐嶆柟寮忥細

  • lock(), 濡傛灉鑾峰彇浜嗛攣绔嬪嵆榪斿洖錛屽鏋滃埆鐨勭嚎紼嬫寔鏈夐攣錛屽綋鍓嶇嚎紼嬪垯涓鐩村浜庝紤鐪犵姸鎬侊紝鐩村埌鑾峰彇閿?/p>

  • tryLock(), 濡傛灉鑾峰彇浜嗛攣绔嬪嵆榪斿洖true錛屽鏋滃埆鐨勭嚎紼嬫鎸佹湁閿侊紝绔嬪嵆榪斿洖false錛?/p>

  • tryLock(long timeout,TimeUnit unit)錛?濡傛灉鑾峰彇浜嗛攣瀹氱珛鍗寵繑鍥瀟rue錛屽鏋滃埆鐨勭嚎紼嬫鎸佹湁閿侊紝浼氱瓑寰呭弬鏁扮粰瀹氱殑鏃墮棿錛屽湪絳夊緟鐨勮繃紼嬩腑錛屽鏋滆幏鍙栦簡閿佸畾錛屽氨榪斿洖true錛屽鏋滅瓑寰呰秴鏃訛紝榪斿洖false錛?/p>

  • lockInterruptibly:濡傛灉鑾峰彇浜嗛攣瀹氱珛鍗寵繑鍥烇紝濡傛灉娌℃湁鑾峰彇閿佸畾錛屽綋鍓嶇嚎紼嬪浜庝紤鐪犵姸鎬侊紝鐩村埌鎴栬呴攣瀹氾紝鎴栬呭綋鍓嶇嚎紼嬭鍒殑綰跨▼涓柇

2銆乻ynchronized鏄湪JVM灞傞潰涓婂疄鐜扮殑錛屼笉浣嗗彲浠ラ氳繃涓浜涚洃鎺у伐鍏風洃鎺ynchronized鐨勯攣瀹氾紝鑰屼笖鍦ㄤ唬鐮佹墽琛屾椂鍑虹幇寮傚父錛孞VM浼氳嚜鍔ㄩ噴鏀鵑攣瀹氾紝浣嗘槸浣跨敤Lock鍒欎笉琛岋紝lock鏄氳繃浠g爜瀹炵幇鐨勶紝瑕佷繚璇侀攣瀹氫竴瀹氫細琚噴鏀撅紝灝卞繀欏誨皢unLock()鏀懼埌finally{}涓?/p>

3銆佸湪璧勬簮绔炰簤涓嶆槸寰堟縺鐑堢殑鎯呭喌涓嬶紝Synchronized鐨勬ц兘瑕佷紭浜嶳eetrantLock錛屼絾鏄湪璧勬簮绔炰簤寰堟縺鐑堢殑鎯呭喌涓嬶紝Synchronized鐨勬ц兘浼氫笅闄嶅嚑鍗佸嶏紝浣嗘槸ReetrantLock鐨勬ц兘鑳界淮鎸佸父鎬侊紱

5.0鐨勫綰跨▼浠誨姟鍖呭浜庡悓姝ョ殑鎬ц兘鏂歸潰鏈変簡寰堝ぇ鐨勬敼榪涳紝鍦ㄥ師鏈塻ynchronized鍏抽敭瀛楃殑鍩虹涓婏紝鍙堝鍔犱簡ReentrantLock錛屼互鍙婂悇縐岮tomic綾匯備簡瑙e叾鎬ц兘鐨勪紭鍔g▼搴︼紝鏈夊姪涓庢垜浠湪鐗瑰畾鐨勬儏褰笅鍋氬嚭姝g‘鐨勯夋嫨銆?/p>

綆鍗曠殑鎬葷粨

  • synchronized錛?/p>

    鍦ㄨ祫婧愮珵浜変笉鏄緢嬋鐑堢殑鎯呭喌涓嬶紝鍋跺皵浼氭湁鍚屾鐨勬儏褰笅錛宻ynchronized鏄緢鍚堥傜殑銆傚師鍥犲湪浜庯紝緙栬瘧紼嬪簭閫氬父浼氬敖鍙兘鐨勮繘琛屼紭鍖杝ynchronize錛屽彟澶栧彲璇繪ч潪甯稿ソ錛屼笉綆$敤娌$敤榪?.0澶氱嚎紼嬪寘鐨勭▼搴忓憳閮借兘鐞嗚В銆?/p>

  • ReentrantLock:

    ReentrantLock鎻愪緵浜嗗鏍峰寲鐨勫悓姝ワ紝姣斿鏈夋椂闂撮檺鍒剁殑鍚屾錛屽彲浠ヨInterrupt鐨勫悓姝ワ紙synchronized鐨勫悓姝ユ槸涓嶈兘Interrupt鐨勶級絳夈傚湪璧勬簮绔炰簤涓嶆縺鐑堢殑鎯呭艦涓嬶紝鎬ц兘紼嶅井姣攕ynchronized宸偣鐐廣備絾鏄綋鍚屾闈炲父嬋鐑堢殑鏃跺欙紝synchronized鐨勬ц兘涓涓嬪瓙鑳戒笅闄嶅ソ鍑犲崄鍊嶃傝孯eentrantLock紜繕鑳界淮鎸佸父鎬併?/p>

  • Atomic:

    鍜屼笂闈㈢殑綾諱技錛屼笉嬋鐑堟儏鍐典笅錛屾ц兘姣攕ynchronized鐣ラ婏紝鑰屾縺鐑堢殑鏃跺欙紝涔熻兘緇存寔甯告併傛縺鐑堢殑鏃跺欙紝Atomic鐨勬ц兘浼氫紭浜嶳eentrantLock涓鍊嶅乏鍙熾備絾鏄叾鏈変竴涓己鐐癸紝灝辨槸鍙兘鍚屾涓涓鹼紝涓孌典唬鐮佷腑鍙兘鍑虹幇涓涓狝tomic鐨勫彉閲忥紝澶氫簬涓涓悓姝ユ棤鏁堛傚洜涓轟粬涓嶈兘鍦ㄥ涓狝tomic涔嬮棿鍚屾銆?/p>

鎵浠ワ紝鎴戜滑鍐欏悓姝ョ殑鏃跺欙紝浼樺厛鑰冭檻synchronized錛屽鏋滄湁鐗規畩闇瑕侊紝鍐嶈繘涓姝ヤ紭鍖栥俁eentrantLock鍜孉tomic濡傛灉鐢ㄧ殑涓嶅ソ錛屼笉浠呬笉鑳芥彁楂樻ц兘錛岃繕鍙兘甯︽潵鐏鵑毦銆?/p>

嫻嬭瘯緇撴灉

鍏堣創嫻嬭瘯緇撴灉錛氬啀璐翠唬鐮侊紙Atomic嫻嬭瘯浠g爜涓嶅噯紜紝涓涓悓姝ヤ腑鍙兘鏈?涓狝ctomic錛岃繖閲岀敤浜?涓紝浣嗘槸榪欓噷鐨勬祴璇曞彧鐪嬮熷害錛?/p>

round:100000 thread:5

Sync = 35301694

Lock = 56255753

Atom = 43467535

round:200000 thread:10

Sync = 110514604

Lock = 204235455

Atom = 170535361

round:300000 thread:15

Sync = 253123791

Lock = 448577123

Atom = 362797227

round:400000 thread:20

Sync = 16562148262

Lock = 846454786

Atom = 667947183

round:500000 thread:25

Sync = 26932301731

Lock = 1273354016

Atom = 982564544

Java浠g爜

package test.thread;       import static java.lang.System.out;       import java.util.Random;      import java.util.concurrent.BrokenBarrierException;      import java.util.concurrent.CyclicBarrier;      import java.util.concurrent.ExecutorService;      import java.util.concurrent.Executors;      import java.util.concurrent.atomic.AtomicInteger;      import java.util.concurrent.atomic.AtomicLong;      import java.util.concurrent.locks.ReentrantLock;       public class TestSyncMethods {           public static void test(int round,int threadNum,CyclicBarrier cyclicBarrier){              new SyncTest("Sync",round,threadNum,cyclicBarrier).testTime();              new LockTest("Lock",round,threadNum,cyclicBarrier).testTime();              new AtomicTest("Atom",round,threadNum,cyclicBarrier).testTime();          }           public static void main(String args[]){               for(int i=0;i<5;i++){                  int round=100000*(i+1);                  int threadNum=5*(i+1);                  CyclicBarrier cb=new CyclicBarrier(threadNum*2+1);                  out.println("==========================");                  out.println("round:"+round+" thread:"+threadNum);                  test(round,threadNum,cb);               }          }      }       class SyncTest extends TestTemplate{          public SyncTest(String _id,int _round,int _threadNum,CyclicBarrier _cb){              super( _id, _round, _threadNum, _cb);          }          @Override         /**         * synchronized鍏抽敭瀛椾笉鍦ㄦ柟娉曠鍚嶉噷闈紝鎵浠ヤ笉娑夊強閲嶈澆闂         */         synchronized long  getValue() {              return super.countValue;          }          @Override         synchronized void  sumValue() {              super.countValue+=preInit[index++%round];          }      }        class LockTest extends TestTemplate{          ReentrantLock lock=new ReentrantLock();          public LockTest(String _id,int _round,int _threadNum,CyclicBarrier _cb){              super( _id, _round, _threadNum, _cb);          }          /**         * synchronized鍏抽敭瀛椾笉鍦ㄦ柟娉曠鍚嶉噷闈紝鎵浠ヤ笉娑夊強閲嶈澆闂         */         @Override         long getValue() {              try{                  lock.lock();                  return super.countValue;              }finally{                  lock.unlock();              }          }          @Override         void sumValue() {              try{                  lock.lock();                  super.countValue+=preInit[index++%round];              }finally{                  lock.unlock();              }          }      }        class AtomicTest extends TestTemplate{          public AtomicTest(String _id,int _round,int _threadNum,CyclicBarrier _cb){              super( _id, _round, _threadNum, _cb);          }          @Override         /**         * synchronized鍏抽敭瀛椾笉鍦ㄦ柟娉曠鍚嶉噷闈紝鎵浠ヤ笉娑夊強閲嶈澆闂         */         long  getValue() {              return super.countValueAtmoic.get();          }          @Override         void  sumValue() {              super.countValueAtmoic.addAndGet(super.preInit[indexAtomic.get()%round]);          }      }      abstract class TestTemplate{          private String id;          protected int round;          private int threadNum;          protected long countValue;          protected AtomicLong countValueAtmoic=new AtomicLong(0);          protected int[] preInit;          protected int index;          protected AtomicInteger indexAtomic=new AtomicInteger(0);          Random r=new Random(47);          //浠誨姟鏍呮爮錛屽悓鎵逛換鍔★紝鍏堝埌杈緒ait鐨勪換鍔℃寕璧鳳紝涓鐩寸瓑鍒板叏閮ㄤ換鍔″埌杈懼埗瀹氱殑wait鍦扮偣鍚庯紝鎵嶈兘鍏ㄩ儴鍞ら啋錛岀戶緇墽琛?         private CyclicBarrier cb;          public TestTemplate(String _id,int _round,int _threadNum,CyclicBarrier _cb){              this.id=_id;              this.round=_round;              this.threadNum=_threadNum;              cb=_cb;              preInit=new int[round];              for(int i=0;i<preInit.length;i++){                  preInit[i]=r.nextInt(100);              }          }           abstract void sumValue();          /*         * 瀵筶ong鐨勬搷浣滄槸闈炲師瀛愮殑錛屽師瀛愭搷浣滃彧閽堝32浣?        * long鏄?4浣嶏紝搴曞眰鎿嶄綔鐨勬椂鍊欏垎2涓?2浣嶈鍐欙紝鍥犳涓嶆槸綰跨▼瀹夊叏         */         abstract long getValue();           public void testTime(){              ExecutorService se=Executors.newCachedThreadPool();              long start=System.nanoTime();              //鍚屾椂寮鍚?*ThreadNum涓暟鐨勮鍐欑嚎紼?             for(int i=0;i<threadNum;i++){                  se.execute(new Runnable(){                      public void run() {                          for(int i=0;i<round;i++){                              sumValue();                          }                           //姣忎釜綰跨▼鎵ц瀹屽悓姝ユ柟娉曞悗灝辯瓑寰?                         try {                              cb.await();                          } catch (InterruptedException e) {                              // TODO Auto-generated catch block                              e.printStackTrace();                          } catch (BrokenBarrierException e) {                              // TODO Auto-generated catch block                              e.printStackTrace();                          }                        }                  });                  se.execute(new Runnable(){                      public void run() {                           getValue();                          try {                              //姣忎釜綰跨▼鎵ц瀹屽悓姝ユ柟娉曞悗灝辯瓑寰?                             cb.await();                          } catch (InterruptedException e) {                              // TODO Auto-generated catch block                              e.printStackTrace();                          } catch (BrokenBarrierException e) {                              // TODO Auto-generated catch block                              e.printStackTrace();                          }                       }                  });              }               try {                  //褰撳墠緇熻綰跨▼涔焪ait,鎵浠yclicBarrier鐨勫垵濮嬪兼槸threadNum*2+1                  cb.await();              } catch (InterruptedException e) {                  // TODO Auto-generated catch block                  e.printStackTrace();              } catch (BrokenBarrierException e) {                  // TODO Auto-generated catch block                  e.printStackTrace();              }              //鎵鏈夌嚎紼嬫墽琛屽畬鎴愪箣鍚庯紝鎵嶄細璺戝埌榪欎竴姝?             long duration=System.nanoTime()-start;              out.println(id+" = "+duration);           }       }

琛ュ厖鐭ヨ瘑

CyclicBarrier鍜孋ountDownLatch涓鏍鳳紝閮芥槸鍏充簬綰跨▼鐨勮鏁板櫒銆?/p>

  • CyclicBarrier鍒濆鍖栨椂瑙勫畾涓涓暟鐩紝鐒跺悗璁$畻璋冪敤浜咰yclicBarrier.await()榪涘叆絳夊緟鐨勭嚎紼嬫暟銆傚綋綰跨▼鏁拌揪鍒頒簡榪欎釜鏁扮洰鏃訛紝鎵鏈夎繘鍏ョ瓑寰呯姸鎬佺殑綰跨▼琚敜閱掑茍緇х畫銆?/li>
  • CyclicBarrier灝辮薄瀹冨悕瀛楃殑鎰忔濅竴鏍鳳紝鍙湅鎴愭槸涓殰紕嶏紝 鎵鏈夌殑綰跨▼蹇呴』鍒伴綈鍚庢墠鑳戒竴璧烽氳繃榪欎釜闅滅銆?/li>
  • CyclicBarrier鍒濆鏃惰繕鍙甫涓涓猂unnable鐨勫弬鏁幫紝 姝unnable浠誨姟鍦–yclicBarrier鐨勬暟鐩揪鍒板悗錛屾墍鏈夊叾瀹冪嚎紼嬭鍞ら啋鍓嶈鎵ц銆?/li>


jinfeng_wang 2016-12-14 14:26 鍙戣〃璇勮
]]>
主站蜘蛛池模板: 亚洲美免无码中文字幕在线| 免费精品一区二区三区在线观看| 久久国产一片免费观看| 一级看片免费视频囗交| yellow视频免费看| 一级毛片免费在线| 中国在线观看免费的www| 中国极品美軳免费观看| 国产真人无码作爱视频免费| 免费精品99久久国产综合精品| 久别的草原电视剧免费观看| 免费A级毛片无码A∨中文字幕下载| 亚洲欧洲免费视频| 亚洲视频免费观看| 91香蕉视频免费| 白白国产永久免费视频| 免费欧洲毛片A级视频无风险| 免费在线精品视频| 色噜噜亚洲精品中文字幕| 亚洲国产精品无码AAA片| 亚洲一区二区在线免费观看| 亚洲国产精品综合久久久| 亚洲日韩一区二区一无码| 美女被免费网站在线视频免费 | 又粗又黄又猛又爽大片免费| 亚洲?V乱码久久精品蜜桃| 国产亚洲色婷婷久久99精品91| 久久亚洲精品中文字幕三区| 亚洲欧洲另类春色校园小说| 亚洲国产成人无码AV在线| 永久免费精品影视网站| 嫩草成人永久免费观看| 免费无码又黄又爽又刺激| 免费A级毛片无码A∨男男| 亚洲精品中文字幕无码蜜桃 | 国产成人精品高清免费| 亚洲一区无码中文字幕| 亚洲最大的视频网站| 豆国产96在线|亚洲| 在线涩涩免费观看国产精品| 国产在线观看片a免费观看|