锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲av中文无码乱人伦在线观看 ,亚洲精品国产高清不卡在线,亚洲AV无码久久精品蜜桃http://www.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://www.tkk7.com/jinfeng_wang/archive/2016/12/14/432095.htmljinfeng_wangjinfeng_wangWed, 14 Dec 2016 08:06:00 GMThttp://www.tkk7.com/jinfeng_wang/archive/2016/12/14/432095.htmlhttp://www.tkk7.com/jinfeng_wang/comments/432095.htmlhttp://www.tkk7.com/jinfeng_wang/archive/2016/12/14/432095.html#Feedback0http://www.tkk7.com/jinfeng_wang/comments/commentRss/432095.htmlhttp://www.tkk7.com/jinfeng_wang/services/trackbacks/432095.html闃呰鍏ㄦ枃

jinfeng_wang 2016-12-14 16:06 鍙戣〃璇勮
]]>
Synchronized涓嶭ock閿佺殑鍖哄埆http://www.tkk7.com/jinfeng_wang/archive/2016/12/14/432090.htmljinfeng_wangjinfeng_wangWed, 14 Dec 2016 06:26:00 GMThttp://www.tkk7.com/jinfeng_wang/archive/2016/12/14/432090.htmlhttp://www.tkk7.com/jinfeng_wang/comments/432090.htmlhttp://www.tkk7.com/jinfeng_wang/archive/2016/12/14/432090.html#Feedback0http://www.tkk7.com/jinfeng_wang/comments/commentRss/432090.htmlhttp://www.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 鍙戣〃璇勮
]]>
主站蜘蛛池模板: 亚洲免费人成在线视频观看 | 日本免费久久久久久久网站| 青草青草视频2免费观看| 亚洲精品av无码喷奶水糖心| 色噜噜亚洲男人的天堂| 亚洲 欧洲 自拍 另类 校园| 久久精品国产亚洲AV蜜臀色欲| 亚洲第一二三四区| 亚洲xxxxxx| 亚洲欧美日韩综合久久久久| 亚洲aⅴ无码专区在线观看春色| 亚洲JIZZJIZZ妇女| 99亚洲乱人伦aⅴ精品| 深夜福利在线免费观看| 一级黄色免费网站| 日本一区午夜艳熟免费| 日本xxxx色视频在线观看免费| 免费人妻无码不卡中文字幕系| 最近中文字幕免费2019| 午夜宅男在线永久免费观看网| 好男人视频社区精品免费| 国产免费人视频在线观看免费| 亚洲?V无码成人精品区日韩| 在线亚洲精品福利网址导航| 亚洲处破女AV日韩精品| 亚洲成人免费网站| 亚洲人成网站999久久久综合| 在线观看亚洲电影| a毛看片免费观看视频| 在线免费观看国产| 午夜一级毛片免费视频| 亚洲综合色区在线观看| 亚洲精品在线观看视频| 亚洲熟妇av午夜无码不卡| 曰批免费视频播放在线看片二| 中文字幕久精品免费视频| 国产卡二卡三卡四卡免费网址 | 无码少妇精品一区二区免费动态 | 国产一区二区三区免费观看在线 | 国产亚洲综合久久| 日韩精品免费视频|