锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲av极品无码专区在线观看,亚洲综合激情六月婷婷在线观看,亚洲综合另类小说色区http://www.tkk7.com/stevenjohn/category/54681.html閭d簺闈掓槬鐨勫瞾鏈?/description>zh-cnTue, 14 Jun 2016 14:05:19 GMTTue, 14 Jun 2016 14:05:19 GMT60鑱婅亰楂樺茍鍙戠郴緇熶箣闄愭祦鐗規(guī)妧-1http://www.tkk7.com/stevenjohn/archive/2016/06/14/430882.htmlabinabinTue, 14 Jun 2016 05:38:00 GMThttp://www.tkk7.com/stevenjohn/archive/2016/06/14/430882.htmlhttp://www.tkk7.com/stevenjohn/comments/430882.htmlhttp://www.tkk7.com/stevenjohn/archive/2016/06/14/430882.html#Feedback0http://www.tkk7.com/stevenjohn/comments/commentRss/430882.htmlhttp://www.tkk7.com/stevenjohn/services/trackbacks/430882.html闃呰鍏ㄦ枃

abin 2016-06-14 13:38 鍙戣〃璇勮
]]>
鍏充簬鍗旵PU錛屽CPU涓婄殑鍘熷瓙鎿嶄綔http://www.tkk7.com/stevenjohn/archive/2015/04/20/424546.htmlabinabinMon, 20 Apr 2015 06:02:00 GMThttp://www.tkk7.com/stevenjohn/archive/2015/04/20/424546.htmlhttp://www.tkk7.com/stevenjohn/comments/424546.htmlhttp://www.tkk7.com/stevenjohn/archive/2015/04/20/424546.html#Feedback0http://www.tkk7.com/stevenjohn/comments/commentRss/424546.htmlhttp://www.tkk7.com/stevenjohn/services/trackbacks/424546.html鎵璋撳師瀛愭搷浣?灝辨槸"涓嶅彲涓柇鐨勪竴涓垨涓緋誨垪鎿嶄綔" 銆?/span>

紜歡綰х殑鍘熷瓙鎿嶄綔錛?/span>
鍦ㄥ崟澶勭悊鍣ㄧ郴緇?UniProcessor)涓紝鑳藉鍦ㄥ崟鏉℃寚浠や腑瀹屾垚鐨勬搷浣滈兘鍙互璁や負(fù)鏄? 鍘熷瓙鎿嶄綔"錛屽洜涓轟腑鏂彧鑳藉彂鐢熶簬鎸囦護涔嬮棿銆傝繖涔熸槸鏌愪簺CPU鎸囦護緋葷粺涓紩鍏ヤ簡test_and_set銆乼est_and_clear絳夋寚浠ょ敤浜庝復(fù)鐣岃祫婧愪簰鏂ョ殑鍘熷洜銆?/span>

鍦ㄥ縐板澶勭悊鍣?Symmetric Multi-Processor)緇撴瀯涓氨涓嶅悓浜嗭紝鐢變簬緋葷粺涓湁澶氫釜澶勭悊鍣ㄥ湪鐙珛鍦拌繍琛岋紝鍗充嬌鑳藉湪鍗曟潯鎸囦護涓畬鎴愮殑鎿嶄綔涔熸湁鍙兘鍙楀埌騫叉壈銆?/span>

鍦▁86 騫沖彴涓婏紝CPU鎻愪緵浜嗗湪鎸囦護鎵ц鏈熼棿瀵規(guī)葷嚎鍔犻攣鐨勬墜孌點侰PU鑺墖涓婃湁涓鏉″紩綰?HLOCK pin錛屽鏋滄眹緙栬璦鐨勭▼搴忎腑鍦ㄤ竴鏉℃寚浠ゅ墠闈㈠姞涓婂墠緙"LOCK"錛岀粡榪囨眹緙栦互鍚庣殑鏈哄櫒浠g爜灝變嬌CPU鍦ㄦ墽琛岃繖鏉℃寚浠ょ殑鏃跺欐妸#HLOCK pin鐨勭數(shù)浣嶆媺浣庯紝鎸佺畫鍒拌繖鏉℃寚浠ょ粨鏉熸椂鏀懼紑錛屼粠鑰屾妸鎬葷嚎閿佷綇錛岃繖鏍峰悓涓鎬葷嚎涓婂埆鐨凜PU灝辨殏鏃朵笉鑳介氳繃鎬葷嚎璁塊棶鍐呭瓨浜嗭紝淇濊瘉浜嗚繖鏉℃寚浠ゅ湪澶氬鐞嗗櫒鐜涓殑

鍘熷瓙鎬с?/span>
杞歡綰х殑鍘熷瓙鎿嶄綔錛?/span>
杞歡綰х殑鍘熷瓙鎿嶄綔瀹炵幇渚濊禆浜庣‖浠跺師瀛愭搷浣滅殑鏀寔銆?/span>
瀵逛簬linux鑰岃█錛屽唴鏍告彁渚涗簡涓ょ粍鍘熷瓙鎿嶄綔鎺ュ彛錛氫竴緇勬槸閽堝鏁存暟榪涜鎿嶄綔錛涘彟涓緇勬槸閽堝鍗曠嫭鐨勪綅榪涜鎿嶄綔銆?/span>
2.1. 鍘熷瓙鏁存暟鎿嶄綔
閽堝鏁存暟鐨勫師瀛愭搷浣滃彧鑳藉atomic_t綾誨瀷鐨勬暟鎹鐞嗐傝繖閲屾病鏈変嬌鐢–璇█鐨刬nt綾誨瀷錛屼富瑕佹槸鍥犱負(fù)錛?/span>

1) 璁╁師瀛愬嚱鏁板彧鎺ュ彈atomic_t綾誨瀷鎿嶄綔鏁幫紝鍙互紜繚鍘熷瓙鎿嶄綔鍙笌榪欑鐗規(guī)畩綾誨瀷鏁版嵁涓璧蜂嬌鐢?/span>

2) 浣跨敤atomic_t綾誨瀷紜繚緙栬瘧鍣ㄤ笉瀵圭浉搴旂殑鍊艱繘琛岃闂紭鍖?/span>

3) 浣跨敤atomic_t綾誨瀷鍙互灞忚斀涓嶅悓浣撶郴緇撴瀯涓婄殑鏁版嵁綾誨瀷鐨勫樊寮傘傚敖綆inux鏀寔鐨勬墍鏈夋満鍣ㄤ笂鐨勬暣鍨嬫暟鎹兘鏄?2浣嶏紝浣嗘槸浣跨敤atomic_t鐨勪唬鐮佸彧鑳藉皢璇ョ被鍨嬬殑鏁版嵁褰撲綔24浣嶆潵浣跨敤銆傝繖涓檺鍒跺畬鍏ㄦ槸鍥犱負(fù)鍦⊿PARC浣撶郴緇撴瀯涓婏紝鍘熷瓙鎿嶄綔鐨勫疄鐜頒笉鍚屼簬鍏跺畠浣撶郴緇撴瀯錛?2浣峣nt綾誨瀷鐨勪綆8浣嶅祵鍏ヤ簡涓涓攣錛屽洜涓篠PARC浣撶郴緇撴瀯瀵瑰師瀛愭搷浣滅己涔忔寚浠ょ駭鐨勬敮鎸侊紝鎵浠ュ彧鑳藉埄鐢ㄨ閿佹潵閬垮厤瀵瑰師瀛愮被鍨嬫暟鎹殑騫跺彂璁塊棶銆?/span>

鍘熷瓙鏁存暟鎿嶄綔鏈甯歌鐨勭敤閫斿氨鏄疄鐜拌鏁板櫒銆傚師瀛愭暣鏁版搷浣滃垪琛ㄥ湪涓畾涔夈傚師瀛愭搷浣滈氬父鏄唴鏁涘嚱鏁幫紝寰寰閫氳繃鍐呭祵姹囩紪鎸囦護鏉ュ疄鐜般傚鏋滄煇涓嚱鏁版湰鏉ュ氨鏄師瀛愮殑錛岄偅涔堝畠寰寰浼?xì)琚畾涔夋垚涓涓畯銆?/span>

鍦ㄧ紪鍐欏唴鏍告椂錛屾搷浣滀篃綆鍗曪細(xì)

atomic_t use_cnt;

atomic_set(&use_cnt, 2);

atomic_add(4, &use_cnt);

atomic_inc(use_cnt);

2.2. 鍘熷瓙鎬т笌欏哄簭鎬?/span>

鍘熷瓙鎬х‘淇濇寚浠ゆ墽琛屾湡闂翠笉琚墦鏂紝瑕佷箞鍏ㄩ儴鎵ц錛岃涔堟牴鏈笉鎵ц銆傝岄『搴忔х‘淇濆嵆浣夸袱鏉℃垨澶氭潯鎸囦護鍑虹幇鍦ㄧ嫭绔嬬殑鎵ц綰跨▼涓紝鐢氳嚦鐙珛鐨勫鐞嗗櫒涓婏紝瀹冧滑鏈鎵ц鐨勯『搴忎緷鐒惰淇濇寔銆?/span>

2.3. 鍘熷瓙浣嶆搷浣?/span>

鍘熷瓙浣嶆搷浣滃畾涔夊湪鏂囦歡涓備護浜烘劅鍒板鎬殑鏄綅鎿嶄綔鍑芥暟鏄鏅氱殑鍐呭瓨鍦板潃榪涜鎿嶄綔鐨勩傚師瀛愪綅鎿嶄綔鍦ㄥ鏁版儏鍐典笅鏄涓涓瓧闀跨殑鍐呭瓨璁塊棶錛屽洜鑰屼綅鍙瘋浣嶄簬0-31涔嬮棿(鍦?4浣嶆満鍣ㄤ笂鏄?-63涔嬮棿),浣嗘槸瀵逛綅鍙風(fēng)殑鑼冨洿娌℃湁闄愬埗銆?/span>

緙栧啓鍐呮牳浠g爜錛屽彧瑕佹妸鎸囧悜浜嗕綘甯屾湜鐨勬暟鎹殑鎸囬拡緇欐搷浣滃嚱鏁幫紝灝卞彲浠ヨ繘琛屼綅鎿嶄綔浜嗭細(xì)

unsigned long word = 0;

set_bit(0, &word); /*絎?浣嶈璁劇疆*/

set_bit(1, &word); /*絎?浣嶈璁劇疆*/

clear_bit(1, &word); /*絎?浣嶈娓呯┖*/

change_bit(0, &word); /*緲昏漿絎?浣?/

涓轟粈涔堝叧娉ㄥ師瀛愭搷浣滐紵
1錛夊湪紜涓涓搷浣滄槸鍘熷瓙鐨勬儏鍐典笅錛屽綰跨▼鐜閲岄潰錛屾垜浠彲浠ラ伩鍏嶄粎浠呬負(fù)淇濇姢榪欎釜鎿嶄綔鍦ㄥ鍥村姞涓婃ц兘寮閿鏄傝吹鐨勯攣銆?/span>
2錛夊熷姪浜庡師瀛愭搷浣滐紝鎴戜滑鍙互瀹炵幇浜掓枼閿併?/span>
3錛夊熷姪浜庝簰鏂ラ攣錛屾垜浠彲浠ユ妸涓浜涘垪鎿嶄綔鍙樹負(fù)鍘熷瓙鎿嶄綔銆?/span>

GNU C涓瓁++鏄師瀛愭搷浣滃悧錛?/span>
絳旀涓嶆槸銆倄++鐢?鏉℃寚浠ゅ畬鎴愩倄++鍦ㄥ崟CPU涓嬩笉鏄師瀛愭搷浣溿?/span>
瀵瑰簲3鏉℃眹緙栨寚浠?/span>
movl x, %eax
addl $1, %eax
movl %eax, x
鍦╲c2005涓嬪搴?/span>
++x;
004232FA mov eax,dword ptr [x]
004232FD add eax,1
00423300 mov dword ptr [x],eax
浠嶇劧鏄?鏉℃寚浠ゃ?/span>
鎵浠?+x錛寈++絳夐兘涓嶆槸鍘熷瓙鎿嶄綔銆傚洜鍏舵楠ゅ寘鎷簡浠庡唴瀛樹腑鍙杧鍊兼斁鍏ュ瘎瀛樺櫒錛屽姞瀵勫瓨鍣紝鎶婂煎啓鍏ュ唴瀛樹笁涓寚浠ゃ?/span>

濡備綍瀹炵幇x++鐨勫師瀛愭э紵
鍦ㄥ崟澶勭悊鍣ㄤ笂錛屽鏋滄墽琛寈++鏃訛紝紱佹澶氱嚎紼嬭皟搴︼紝灝卞彲浠ュ疄鐜板師瀛愩傚洜涓哄崟澶勭悊鐨勫綰跨▼騫跺彂鏄吉騫跺彂銆?/span>
鍦ㄥ澶勭悊鍣ㄤ笂錛岄渶瑕佸熷姪cpu鎻愪緵鐨凩ock鍔熻兘銆傞攣鎬葷嚎銆傝鍙栧唴瀛樺鹼紝淇敼錛屽啓鍥炲唴瀛樹笁姝ユ湡闂寸姝㈠埆鐨凜PU璁塊棶鎬葷嚎銆傚悓鏃舵垜浼拌浣跨敤Lock鎸囦護閿佹葷嚎鐨勬椂鍊欙紝OS涔熶笉浼?xì)鎶婂綋鍓嵕U跨▼璋冨害璧頒簡銆傝鏄皟璧頒簡錛岄偅灝遍夯鐑︿簡銆?/span>

鍦ㄥ澶勭悊鍣ㄧ郴緇熶腑瀛樺湪娼滃湪闂鐨勫師鍥犳槸錛?/span>
涓嶄嬌鐢↙OCK鎸囦護鍓嶇紑閿佸畾鎬葷嚎鐨勮瘽錛屽湪涓嬈″唴瀛樿闂懆鏈熶腑鏈夊彲鑳藉叾浠栧鐞嗗櫒浼?xì)漶旂敓寮傚父鎴栦腑鏂Q岃屽湪寮傚父澶勭悊涓湁鍙兘浼?xì)淇敼灏氭湭鍐欏叆鐨勫湴鍧錛岃繖鏍峰綋INC鎿嶄綔瀹屾垚鍚庝細(xì)浜х敓鏃犳晥鏁版嵁錛堣鐩栦簡鍓嶉潰鐨勪慨鏀癸級銆?/span>

spinlock 鐢ㄤ簬CPU鍚屾, 瀹冪殑瀹炵幇鏄熀浜嶤PU閿佸畾鏁版嵁鎬葷嚎鐨勬寚浠?
褰撴煇涓狢PU閿佷綇鏁版嵁鎬葷嚎鍚? 瀹冭涓涓唴瀛樺崟鍏?spinlock_t)鏉ュ垽鏂繖涓猻pinlock 鏄惁宸茬粡琚埆鐨凜PU閿佷綇. 濡傛灉鍚? 瀹冨啓榪涗竴涓壒瀹氬? 琛ㄧず閿佸畾鎴愬姛, 鐒跺悗榪斿洖. 濡傛灉鏄? 瀹冧細(xì)閲嶅浠ヤ笂鎿嶄綔鐩村埌鎴愬姛, 鎴栬卻pin嬈℃暟瓚呰繃涓涓瀹氬? 閿佸畾鏁版嵁鎬葷嚎鐨勬寚浠ゅ彧鑳戒繚璇佷竴涓満鍣ㄦ寚浠ゅ唴, CPU鐙崰鏁版嵁鎬葷嚎.
鍗旵PU褰撶劧鑳界敤spinlock, 浣嗗疄鐜頒笂鏃犻渶閿佸畾鏁版嵁鎬葷嚎.

spinlock鍦ㄩ攣瀹氱殑鏃跺?濡傛灉涓嶆垚鍔?涓嶄細(xì)鐫$湢,浼?xì)鎸伨l殑灝濊瘯,鍗昪pu鐨勬椂鍊檚pinlock浼?xì)璁╁叾瀹僷rocess鍔ㄤ笉浜?

abin 2015-04-20 14:02 鍙戣〃璇勮
]]>
sun.misc.Unsafehttp://www.tkk7.com/stevenjohn/archive/2015/03/15/423475.htmlabinabinSun, 15 Mar 2015 15:42:00 GMThttp://www.tkk7.com/stevenjohn/archive/2015/03/15/423475.htmlhttp://www.tkk7.com/stevenjohn/comments/423475.htmlhttp://www.tkk7.com/stevenjohn/archive/2015/03/15/423475.html#Feedback0http://www.tkk7.com/stevenjohn/comments/commentRss/423475.htmlhttp://www.tkk7.com/stevenjohn/services/trackbacks/423475.html     鍑犲彞鍏充簬Unsafe鐨勫茍鍙戞с俢ompareAndSwap鏂規(guī)硶鏄?em>鍘熷瓙鐨?騫朵笖鍙敤鏉ュ疄鐜伴珮鎬ц兘鐨勩佹棤閿佺殑鏁版嵁緇撴瀯銆傛瘮濡?鑰冭檻闂:鍦ㄤ嬌鐢ㄥぇ閲忕嚎紼嬬殑鍏變韓瀵硅薄涓婂闀垮箋?..
     Java鏄竴闂ㄥ畨鍏ㄧ殑緙栫▼璇█錛岄槻姝㈢▼搴忓憳鐘緢澶氭剼锠㈢殑閿欒錛屽畠浠ぇ閮ㄥ垎鏄熀浜庡唴瀛樼鐞嗙殑銆備絾鏄紝鏈変竴縐嶆柟寮忓彲浠ユ湁鎰忕殑鎵ц涓浜涗笉瀹夊叏銆佸鏄撶姱閿欑殑鎿嶄綔錛岄偅灝辨槸浣跨敤Unsafe綾匯?br />    CAS鎿嶄綔鏈?涓搷浣滄暟錛屽唴瀛樺糓錛岄鏈熷糆錛屾柊鍊糢錛屽鏋淢==E錛屽垯灝嗗唴瀛樺間慨鏀逛負(fù)B錛屽惁鍒欏暐閮戒笉鍋氥?br />    sun.misc.Unsafe榪欎釜綾繪槸濡傛鍦頒笉瀹夊叏錛屼互鑷充簬JDK寮鍙戣呭鍔犱簡寰堝鐗規(guī)畩闄愬埗鏉ヨ闂畠銆傚畠鐨勬瀯閫犲櫒鏄鏈夌殑錛屽伐鍘傛柟娉?span style="color: #993300;">getUnsafe()鐨勮皟鐢ㄥ櫒鍙兘琚獴ootloader鍔犺澆銆傚浣犲湪涓嬮潰浠g爜鐗囨鐨勭8琛屾墍瑙侊紝榪欎釜瀹朵紮鐢氳嚦娌℃湁琚換浣曠被鍔犺澆鍣ㄥ姞杞斤紝鎵浠ュ畠鐨勭被鍔犺澆鍣ㄦ槸null銆傚畠浼?xì)鎶涘?span style="color: #993300;">SecurityException 寮傚父鏉ラ樆姝鏡鍏ヨ呫?br />    public final class Unsafe {
   ...
   private Unsafe() {}
   private static final Unsafe theUnsafe = new Unsafe();
   ...
   public static Unsafe getUnsafe() {
      Class cc = sun.reflect.Reflection.getCallerClass(2);
      if (cc.getClassLoader() != null)
          throw new SecurityException("Unsafe");
      return theUnsafe;
   }
   ...
}
騫歌繍鐨勬槸榪欓噷鏈変竴涓猆nsafe鐨勫彉閲忓彲浠ヨ鐢ㄦ潵鍙栧緱Unsafe鐨勫疄渚嬨傛垜浠彲浠ヨ交鏉懼湴緙栧啓涓涓鍒舵柟娉曢氳繃鍙嶅皠鏉ュ疄鐜幫紝濡備笅鎵紺猴細(xì)
錛?a target="_blank" rel="nofollow">http://highlyscalable.wordpress.com/2012/02/02/direct-memory-access-in-java/錛?/div>
public static Unsafe getUnsafe() {
   try {
           Field f = Unsafe.class.getDeclaredField("theUnsafe");
           f.setAccessible(true);
           return (Unsafe)f.get(null);
   } catch (Exception e) {
       /* ... */
   }
}

Unsafe涓浜涙湁鐢ㄧ殑鐗規(guī)?/strong>

  1. 铏氭嫙鏈?#8220;闆嗙害鍖?#8221;錛圴M intrinsification錛夛細(xì)濡傜敤浜庢棤閿丠ash琛ㄤ腑鐨凜AS錛堟瘮杈冨拰浜ゆ崲錛夈傚啀姣斿compareAndSwapInt榪欎釜鏂規(guī)硶鐢↗NI璋冪敤錛屽寘鍚簡瀵笴AS鏈夌壒孌婂紩瀵肩殑鏈湴浠g爜銆傚湪榪欓噷浣犺兘璇誨埌鏇村鍏充簬CAS鐨勪俊鎭細(xì)http://en.wikipedia.org/wiki/Compare-and-swap銆?/li>
  2. 涓繪満铏氭嫙鏈猴紙璇戞敞錛氫富鏈鴻櫄鎷熸満涓昏鐢ㄦ潵綆$悊鍏朵粬铏氭嫙鏈恒傝岃櫄鎷熷鉤鍙版垜浠湅鍒板彧鏈塯uest VM錛夌殑sun.misc.Unsafe鍔熻兘鑳藉琚敤浜庢湭鍒濆鍖栫殑瀵硅薄鍒嗛厤鍐呭瓨錛堢敤allocateInstance鏂規(guī)硶錛夛紝鐒跺悗灝嗘瀯閫犲櫒璋冪敤瑙i噴涓哄叾浠栨柟娉曠殑璋冪敤銆?/li>
  3. 浣犲彲浠ヤ粠鏈湴鍐呭瓨鍦板潃涓拷韙埌榪欎簺鏁版嵁銆備嬌鐢?span style="color: #993300;">java.lang.Unsafe綾昏幏鍙栧唴瀛樺湴鍧鏄彲鑳界殑銆傝屼笖鍙互閫氳繃unsafe鏂規(guī)硶鐩存帴鎿嶄綔榪欎簺鍙橀噺錛?/li>
  4. 浣跨敤allocateMemory鏂規(guī)硶錛屽唴瀛樺彲浠ヨ鍒嗛厤鍒板爢澶栥備緥濡傚綋allocateDirect鏂規(guī)硶琚皟鐢ㄦ椂DirectByteBuffer鏋勯犲櫒鍐呴儴浼?xì)鋴社?span style="color: #993300;">allocateMemory銆?/li>
  5. arrayBaseOffset鍜?span style="color: #993300;">arrayIndexScale鏂規(guī)硶鍙互琚敤浜庡紑鍙慳rraylets錛屼竴縐嶇敤鏉ュ皢澶ф暟緇勫垎瑙d負(fù)灝忓璞°侀檺鍒舵壂鎻忕殑瀹炴椂娑堣楁垨鑰呭湪澶у璞′笂鍋氭洿鏂板拰縐誨姩銆?/li>

Unsafe.java鏄痡dk騫跺彂綾誨簱java.util.concurrent鍖呬腑浣跨敤鐨勫簳灞傜被錛岃綾諱腑鐨勬柟娉曢兘鏄氳繃native鏂規(guī)硶璋冪敤鎿嶄綔緋葷粺鍛戒護銆?/p>

    鍦ㄥ綰跨▼鐜涓嬶紝涓昏瀛樺湪涓ょ鐗規(guī)畩鐨勫満鏅細(xì)

    1錛涘涓嚎紼嬪悓鏃惰闂煇涓璞$殑鏂規(guī)硶錛岀敱浜庢搷浣滅郴緇熷綰跨▼璋冨害鐨勪笉紜畾鎬э紝瀛樺湪浣胯瀵硅薄鐨勭姸鎬佸浜庝笉涓鑷寸殑鐘舵侊紝涓轟簡閬垮厤榪欑鎯呭喌鐨勫彂鐢燂紝鎴戜滑鍙互澹版槑璇ユ柟娉曚負(fù)鍚屾鏂規(guī)硶錛坰ynchronized錛夈備繚璇佹煇涓鏃跺埢鍙湁涓涓嚎紼嬭皟鐢ㄨ鏂規(guī)硶錛屽叾瀹冭皟鐢ㄧ嚎紼嬪垯琚樆濉炪傝繖縐嶆柟娉曞湪騫跺彂鎬у緢楂樼殑鎯呭喌涓嬩細(xì)浜х敓澶ч噺鐨勭嚎紼嬭皟搴﹀紑閿銆備粠鑰屽獎鍝嶇▼搴忕殑騫跺彂鎬ц兘銆傚湪java.util.concurrent鍖呬腑閫氳繃浣跨敤闈為樆濉炲師瀛愭柟娉曪紝鍑忓皯鎿嶄綔緋葷粺鐨勬棤鐢ㄧ嚎紼嬭皟搴﹀紑閿錛屼粠鑰屾彁楂樺茍鍙戞ц兘銆?/p>

   2錛涘綰跨▼閫氳繃鏌愪釜瀵硅薄榪涜閫氫俊錛屽嵆甯歌鐨勭敓浜ц呮秷璐硅呮ā鍨嬨傚湪浠ュ墠鐨刯dk鐗堟湰涓槸閫氳繃wait,notify鏂規(guī)硶瀹炵幇鐨勩傝鏂規(guī)硶涔熸槸閫氳繃搴曞眰鍦ㄦ煇涓俊鍙烽噺涓婄殑闃誨闃熷垪瀹炵幇鐨勩傝孶nsafe綾諱腑鐩存帴鎻愪緵鎿嶄綔緋葷粺璋冨害鍛戒護park,unpark,鍑忓皯淇″彿閲忕殑寮閿錛屾彁楂樻柊鑳姐?/p>

   浠庝笂闈㈠彲浠ョ湅鍑猴紝Unsafe綾繪槸閫氳繃鎻愪緵搴曞眰鐨勬搷浣滅郴緇熷懡浠ゆ帴鍙g粰寮鍙戣咃紝浠庤屾彁渚涚▼搴忕殑鎬ц兘銆?/p>



abin 2015-03-15 23:42 鍙戣〃璇勮
]]>java騫跺彂搴撲箣Executors甯哥敤鐨勫垱寤篍xecutorService鐨勫嚑涓柟娉曡鏄?/title><link>http://www.tkk7.com/stevenjohn/archive/2015/01/21/422344.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Wed, 21 Jan 2015 14:18:00 GMT</pubDate><guid>http://www.tkk7.com/stevenjohn/archive/2015/01/21/422344.html</guid><wfw:comment>http://www.tkk7.com/stevenjohn/comments/422344.html</wfw:comment><comments>http://www.tkk7.com/stevenjohn/archive/2015/01/21/422344.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/stevenjohn/comments/commentRss/422344.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/stevenjohn/services/trackbacks/422344.html</trackback:ping><description><![CDATA[<p><strong>涓銆佺嚎紼嬫睜鐨勫垱寤?/strong> </p><p> 鎴戜滑鍙互閫氳繃ThreadPoolExecutor鏉ュ垱寤轟竴涓嚎紼嬫睜銆?br /></p><pre>new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, milliseconds,runnableTaskQueue, handler);</pre><p>鍒涘緩涓涓嚎紼嬫睜闇瑕佽緭鍏ュ嚑涓弬鏁幫細(xì) </p><ul><li>corePoolSize錛堢嚎紼嬫睜鐨勫熀鏈ぇ灝忥級錛氬綋鎻愪氦涓涓換鍔″埌綰跨▼姹犳椂錛岀嚎紼嬫睜浼?xì)鍒涘晦Z竴涓嚎紼嬫潵鎵ц浠誨姟錛屽嵆浣垮叾浠栫┖闂茬殑鍩烘湰綰跨▼鑳藉鎵ц鏂頒換鍔′篃浼?xì)鍒涘缓绾拷E嬶紝絳夊埌闇瑕佹墽琛岀殑浠誨姟鏁板ぇ浜庣嚎紼嬫睜鍩烘湰澶у皬鏃跺氨涓嶅啀鍒涘緩銆傚鏋滆皟鐢ㄤ簡綰跨▼姹犵殑prestartAllCoreThreads鏂規(guī)硶錛岀嚎紼嬫睜浼?xì)鎻愬墠鍒涘缓迤堝惎鍔ㄦ墍鏈夊熀鏈嚎紼嬨?</li><li>runnableTaskQueue錛堜換鍔¢槦鍒楋級錛氱敤浜庝繚瀛樼瓑寰呮墽琛岀殑浠誨姟鐨勯樆濉為槦鍒椼?鍙互閫夋嫨浠ヤ笅鍑犱釜闃誨闃熷垪銆? <ul><li>ArrayBlockingQueue錛氭槸涓涓熀浜庢暟緇勭粨鏋勭殑鏈夌晫闃誨闃熷垪錛屾闃熷垪鎸?FIFO錛堝厛榪涘厛鍑猴級鍘熷垯瀵瑰厓绱犺繘琛屾帓搴忋?</li><li>LinkedBlockingQueue錛氫竴涓熀浜庨摼琛ㄧ粨鏋勭殑闃誨闃熷垪錛屾闃熷垪鎸塅IFO 錛堝厛榪涘厛鍑猴級 鎺掑簭鍏冪礌錛屽悶鍚愰噺閫氬父瑕侀珮浜嶢rrayBlockingQueue銆傞潤鎬佸伐鍘傛柟娉旹xecutors.newFixedThreadPool()浣跨敤浜嗚繖涓槦鍒椼?</li><li>SynchronousQueue錛氫竴涓笉瀛樺偍鍏冪礌鐨勯樆濉為槦鍒椼傛瘡涓彃鍏ユ搷浣滃繀欏葷瓑鍒板彟涓涓嚎紼嬭皟鐢ㄧЩ闄ゆ搷浣滐紝鍚﹀垯鎻掑叆鎿嶄綔涓鐩村浜庨樆濉炵姸鎬侊紝鍚炲悙閲忛氬父瑕侀珮浜嶭inkedBlockingQueue錛岄潤鎬佸伐鍘傛柟娉旹xecutors.newCachedThreadPool浣跨敤浜嗚繖涓槦鍒椼?</li><li>PriorityBlockingQueue錛氫竴涓叿鏈変紭鍏堢駭鐨勬棤闄愰樆濉為槦鍒椼?</li></ul></li><li>maximumPoolSize錛堢嚎紼嬫睜鏈澶уぇ灝忥級錛氱嚎紼嬫睜鍏佽鍒涘緩鐨勬渶澶х嚎紼嬫暟銆傚鏋滈槦鍒楁弧浜嗭紝騫朵笖宸插垱寤虹殑綰跨▼鏁板皬浜庢渶澶х嚎紼嬫暟錛屽垯綰跨▼姹犱細(xì)鍐嶅垱寤烘柊鐨勭嚎紼嬫墽琛屼換鍔°傚煎緱娉ㄦ剰鐨勬槸濡傛灉浣跨敤浜嗘棤鐣岀殑浠誨姟闃熷垪榪欎釜鍙傛暟灝辨病浠涔堟晥鏋溿?</li><li>ThreadFactory錛氱敤浜庤緗垱寤虹嚎紼嬬殑宸ュ巶錛屽彲浠ラ氳繃綰跨▼宸ュ巶緇欐瘡涓垱寤哄嚭鏉ョ殑綰跨▼璁劇疆鏇存湁鎰忎箟鐨勫悕瀛椼?</li><li>RejectedExecutionHandler錛堥ケ鍜岀瓥鐣ワ級錛氬綋闃熷垪鍜岀嚎紼嬫睜閮芥弧浜嗭紝璇存槑綰跨▼姹犲浜庨ケ鍜岀姸鎬侊紝閭d箞蹇呴』閲囧彇涓縐嶇瓥鐣ュ鐞嗘彁浜ょ殑鏂頒換鍔°傝繖涓瓥鐣ラ粯璁ゆ儏鍐典笅鏄疉bortPolicy錛岃〃紺烘棤娉曞鐞嗘柊浠誨姟鏃舵姏鍑哄紓甯搞備互涓嬫槸JDK1.5鎻愪緵鐨勫洓縐嶇瓥鐣ャ? <ul><li>AbortPolicy錛氱洿鎺ユ姏鍑哄紓甯搞?</li><li>CallerRunsPolicy錛氬彧鐢ㄨ皟鐢ㄨ呮墍鍦ㄧ嚎紼嬫潵榪愯浠誨姟銆?</li><li>DiscardOldestPolicy錛氫涪寮冮槦鍒楅噷鏈榪戠殑涓涓換鍔★紝騫舵墽琛屽綋鍓嶄換鍔°?</li><li>DiscardPolicy錛氫笉澶勭悊錛屼涪寮冩帀銆?</li><li> 褰撶劧涔熷彲浠ユ牴鎹簲鐢ㄥ満鏅渶瑕佹潵瀹炵幇RejectedExecutionHandler鎺ュ彛鑷畾涔夌瓥鐣ャ傚璁板綍鏃ュ織鎴栨寔涔呭寲涓嶈兘澶勭悊鐨勪換鍔°?</li></ul></li><li>keepAliveTime錛堢嚎紼嬫椿鍔ㄤ繚鎸佹椂闂達級錛氱嚎紼嬫睜鐨勫伐浣滅嚎紼嬬┖闂插悗錛屼繚鎸佸瓨?gòu)z葷殑鏃墮棿銆傛墍浠ュ鏋滀換鍔″緢澶氾紝騫朵笖姣忎釜浠誨姟鎵ц鐨勬椂闂存瘮杈冪煭錛屽彲浠ヨ皟澶ц繖涓椂闂達紝鎻愰珮綰跨▼鐨勫埄鐢ㄧ巼銆?</li><li>TimeUnit錛堢嚎紼嬫椿鍔ㄤ繚鎸佹椂闂寸殑鍗曚綅錛夛細(xì)鍙夌殑鍗曚綅鏈夊ぉ錛圖AYS錛夛紝灝忔椂錛圚OURS錛夛紝鍒嗛挓錛圡INUTES錛夛紝姣(MILLISECONDS)錛屽井縐?MICROSECONDS, 鍗冨垎涔嬩竴姣)鍜屾寰(NANOSECONDS, 鍗冨垎涔嬩竴寰)銆?</li></ul><p> </p><p><strong>浜屻丒xecutors鎻愪緵浜嗕竴浜涙柟渚垮垱寤篢hreadPoolExecutor鐨勫父鐢ㄦ柟娉曪紝涓昏鏈変互涓嬪嚑涓細(xì)</strong> </p><p><strong>1銆?nbsp;Executors.newFixedThreadPool(int nThreads);鍒涘緩鍥哄畾澶у皬(nThreads,澶у皬涓嶈兘瓚呰繃int鐨勬渶澶у?鐨勭嚎紼嬫睜</strong> </p><p>//綰跨▼鏁伴噺 </p><p> int nThreads = 20; </p><p> //鍒涘緩executor 鏈嶅姟  </p><p>  ExecutorService executor = Executors.newFixedThreadPool(nThreads) ; </p><p>閲嶈澆鍚庣殑鐗堟湰錛岄渶瑕佸浼犲叆瀹炵幇浜?span style="font-family: monospace;">ThreadFactory鎺ュ彛鐨勫璞°?/span> </p><p><span style="font-family: "sans serif", tahoma, verdana, helvetica;"> ExecutorService executor = </span>Executors. <span style="font-family: "sans serif", tahoma, verdana, helvetica;">newFixedThreadPool</span>(nThreads,<span style="font-family: monospace;">threadFactory);</span> </p><p>璇存槑錛氬垱寤哄浐瀹氬ぇ灝?nThreads,澶у皬涓嶈兘瓚呰繃int鐨勬渶澶у?鐨勭嚎紼嬫睜錛岀紦鍐蹭換鍔$殑闃熷垪涓篖inkedBlockingQueue,澶у皬涓烘暣鍨嬬殑鏈澶ф暟錛屽綋浣跨敤姝ょ嚎紼嬫睜鏃訛紝鍦ㄥ悓鎵ц鐨勪換鍔℃暟閲忚秴榪囦紶鍏ョ殑綰跨▼姹犲ぇ灝忓煎悗錛屽皢浼?xì)鏀惧叆LinkedBlockingQueue錛屽湪LinkedBlockingQueue涓殑浠誨姟闇瑕佺瓑寰呯嚎紼嬬┖闂插悗鍐嶆墽琛岋紝濡傛灉鏀懼叆LinkedBlockingQueue涓殑浠誨姟瓚呰繃鏁村瀷鐨勬渶澶ф暟鏃訛紝鎶涘嚭RejectedExecutionException銆?</p><p><strong>2銆丒xecutors.newSingleThreadExecutor()錛氬垱寤哄ぇ灝忎負(fù)1鐨勫浐瀹氱嚎紼嬫睜銆?/strong> </p><p> ExecutorService executor = Executors.newSingleThreadExecutor(); </p><p>閲嶈澆鍚庣殑鐗堟湰錛岄渶瑕佸浼犲叆瀹炵幇浜?span style="font-family: monospace;">ThreadFactory鎺ュ彛鐨勫璞°?/span> </p><p><span style="font-family: "sans serif", tahoma, verdana, helvetica;"> ExecutorService executor = </span>Executors. newSingleThreadScheduledExecutor(ThreadFactory threadFactory)  </p><p>璇存槑錛氬垱寤哄ぇ灝忎負(fù)1鐨勫浐瀹氱嚎紼嬫睜錛屽悓鏃舵墽琛屼換鍔?task)鐨勫彧鏈変竴涓?鍏跺畠鐨勶紙浠誨姟錛塼ask閮芥斁鍦↙inkedBlockingQueue涓帓闃熺瓑寰呮墽琛屻?</p><p>3銆?strong>Executors</strong>.<strong>newCachedThreadPool</strong>()錛涘垱寤篶orePoolSize涓?錛屾渶澶х嚎紼嬫暟涓烘暣鍨嬬殑鏈澶ф暟錛岀嚎紼媖eepAliveTime涓?鍒嗛挓錛岀紦瀛樹換鍔$殑闃熷垪涓篠ynchronousQueue鐨勭嚎紼嬫睜銆?</p><p> ExecutorService executor = Executors.newCachedThreadPool()錛?</p><p> 褰撶劧涔熷彲浠ヤ互涓嬮潰鐨勬柟寮忓垱寤猴紝閲嶈澆鍚庣殑鐗堟湰錛岄渶瑕佸浼犲叆瀹炵幇浜?span style="font-family: monospace;">ThreadFactory鎺ュ彛鐨勫璞°?/span> </p><p><span style="font-family: "sans serif", tahoma, verdana, helvetica;"> ExecutorService executor = </span>Executors.newCachedThreadPool(ThreadFactory threadFactory) ; </p><p>璇存槑錛氫嬌鐢ㄦ椂錛屾斁鍏ョ嚎紼嬫睜鐨則ask浠誨姟浼?xì)澶嶇敤绾拷E嬫垨鍚姩鏂扮嚎紼嬫潵鎵ц錛屾敞鎰忎簨欏癸細(xì)鍚姩鐨勭嚎紼嬫暟濡傛灉瓚呰繃鏁村瀷鏈澶у煎悗浼?xì)鎶涘嚭RejectedExecutionException寮傚父錛屽惎鍔ㄥ悗鐨勭嚎紼嬪瓨?gòu)z繪椂闂翠負(fù)涓鍒嗛挓銆?</p><p><strong>4銆丒xecutors.newScheduledThreadPool(int corePoolSize):鍒涘緩corePoolSize澶у皬鐨勭嚎紼嬫睜銆?/strong> </p><p>//綰跨▼鏁伴噺 </p><p> int corePoolSize= 20; </p><p> //鍒涘緩executor 鏈嶅姟  </p><p>  ExecutorService executor = Executors.newScheduledThreadPool(corePoolSize) ; </p><p>閲嶈澆鍚庣殑鐗堟湰錛岄渶瑕佸浼犲叆瀹炵幇浜?span style="font-family: monospace;">ThreadFactory鎺ュ彛鐨勫璞°?/span> </p><p><span style="font-family: "sans serif", tahoma, verdana, helvetica;"> ExecutorService executor = Executors.</span><span style="font-family: "sans serif", tahoma, verdana, helvetica;">newScheduledThreadPool</span>(<span style="font-family: "sans serif", tahoma, verdana, helvetica;">corePoolSize</span>, threadFactory)<span style="font-family: "sans serif", tahoma, verdana, helvetica;"> 錛?/span> </p><p> 璇存槑錛氱嚎紼媖eepAliveTime涓?錛岀紦瀛樹換鍔$殑闃熷垪涓篋elayedWorkQueue錛屾敞鎰忎笉瑕佽秴榪囨暣鍨嬬殑鏈澶у箋?/p><p><br /><br /><br /><br /><br /><br /></p><img src ="http://www.tkk7.com/stevenjohn/aggbug/422344.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/stevenjohn/" target="_blank">abin</a> 2015-01-21 22:18 <a href="http://www.tkk7.com/stevenjohn/archive/2015/01/21/422344.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>感谢您访问我们的网站,您可能还对以下资源感兴趣:</p> <a href="http://www.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> 主站蜘蛛池模板: <a href="http://477077.com" target="_blank">国产一区二区三区亚洲综合 </a>| <a href="http://91ttvv.com" target="_blank">亚洲人成电影网站色www</a>| <a href="http://by2988.com" target="_blank">久久久久成人精品免费播放动漫</a>| <a href="http://qqcnm.com" target="_blank">亚洲精品V欧洲精品V日韩精品 </a>| <a href="http://ccc998.com" target="_blank">一本大道一卡二大卡三卡免费</a>| <a href="http://www321fafa.com" target="_blank">国产又大又黑又粗免费视频 </a>| <a href="http://0755host.com" target="_blank">亚洲AV福利天堂一区二区三</a>| <a href="http://aqddv.com" target="_blank">久久久久国产免费</a>| <a href="http://wxyz2.com" target="_blank">亚洲熟妇av一区</a>| <a href="http://xsdin.com" target="_blank">免费在线看v网址</a>| <a href="http://scdsrq.com" target="_blank">亚洲乱色熟女一区二区三区蜜臀</a>| <a href="http://448tk.com" target="_blank">女人18毛片a级毛片免费视频</a>| <a href="http://726zh.com" target="_blank">亚洲欧美日韩国产成人</a>| <a href="http://82nnn.com" target="_blank">国产三级电影免费观看</a>| <a href="http://tj-zhongfa.com" target="_blank">黄色毛片免费网站</a>| <a href="http://jdwx58.com" target="_blank">亚洲午夜久久久影院伊人</a>| <a href="http://udlmw.com" target="_blank">丁香花在线视频观看免费</a>| <a href="http://huianpawn.com" target="_blank">亚洲今日精彩视频</a>| <a href="http://xacfdq.com" target="_blank">丁香花免费完整高清观看</a>| <a href="http://266my.com" target="_blank">亚洲av永久中文无码精品综合</a>| <a href="http://51comcomcom.com" target="_blank">日韩免费视频网站</a>| <a href="http://ssni703.com" target="_blank">一区二区三区免费精品视频</a>| <a href="http://vip98888.com" target="_blank">久久国产亚洲精品麻豆</a>| <a href="http://zzjiji.com" target="_blank">亚洲免费观看网站</a>| <a href="http://cqshangshu.com" target="_blank">亚洲精品无码国产片</a>| <a href="http://www-yhty.com" target="_blank">国产成人亚洲精品91专区手机</a>| <a href="http://xxxck.com" target="_blank">久久国产精品2020免费m3u8</a>| <a href="http://6217c.com" target="_blank">亚洲ts人妖网站</a>| <a href="http://haiholr.com" target="_blank">亚洲国产综合精品一区在线播放</a>| <a href="http://shunfk.com" target="_blank">182tv免费视频在线观看</a>| <a href="http://xianzijie.com" target="_blank">亚洲同性男gay网站在线观看</a>| <a href="http://416164.com" target="_blank">日本最新免费不卡二区在线</a>| <a href="http://ccccccx.com" target="_blank">3344在线看片免费</a>| <a href="http://yisaoma.com" target="_blank">亚洲一区二区三区在线观看网站</a>| <a href="http://6h6y.com" target="_blank">a级亚洲片精品久久久久久久</a>| <a href="http://as5566.com" target="_blank">好湿好大好紧好爽免费视频</a>| <a href="http://pjappuiehjdkhsjkssd2.com" target="_blank">亚洲成年看片在线观看</a>| <a href="http://074g8.com" target="_blank">亚洲精品免费观看</a>| <a href="http://33338x.com" target="_blank">亚洲人成电影网站色</a>| <a href="http://t66ycom.com" target="_blank">亚洲精品无码久久一线</a>| <a href="http://tqdrhj.com" target="_blank">免费黄色一级毛片</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>