浠庨浂寮€濮嬪啓浣犺嚜宸辩殑鑷棆閿佷唬鐮佺О涓轰复鐣屽尯锛岄€氬父淇濊瘉涓€娆″彧鏈変竴涓嚎绋嬫墽琛屼复鐣屽尯浠g爜鐨勬柟娉曟槸閿侌煍掋€傚湪鏈枃涓紝鎴戜滑灏嗕粩缁嗗垎鏋愬拰瀛︿範鑷棆閿併€傛墍璋撹嚜鏃嬮攣鏄€氳繃while寰幆瀹炵幇鐨勶紝璁╂嫢鏈夐攣鐨勭嚎绋嬭繘鍏ヤ复鐣屽尯鎵ц浠g爜锛岃娌℃湁閿佺殑绾跨▼缁х画姝粀hile寰幆锛岃繖鍏跺疄灏辨槸绾跨▼鏈韩鍦╳hile寰幆涓€滆嚜鏃嬧€濓紝鎵€浠ヨ繖绉嶉攣绉颁负鑷棆閿併€傝嚜鏃嬮攣鍘熷瓙鎬ц鑷棆閿佷箣鍓嶏紝鎴戜滑涓嶅緱涓嶈璇村師瀛愭€с€傛墍璋撳師瀛愭€э紝绠€鍗曠殑璇村氨鏄竴涓搷浣滆涔堜笉鍋氾紝瑕佷箞鍏ㄩ儴鍋氾紝鑰屽叏閮ㄥ仛灏辨槸鍦ㄦ搷浣滆繃绋嬩腑涓嶈兘琚墦鏂€備緥濡傦紝鍙橀噺鏁版嵁鍔犱竴鐨勬搷浣滄湁浠ヤ笅涓変釜姝ラ锛氫粠鍐呭瓨鍔犺浇鍒板瘎瀛樺櫒銆傚皢鏁版嵁鐨勫€煎鍔?銆傚皢寰楀埌鐨勭粨鏋滃啓鍥炲唴瀛樸€傚師瀛愭€ф槸鎸囦竴涓嚎绋嬪湪鎵ц鍔犳硶杩愮畻鏃朵笉鑳借鍏朵粬绾跨▼鎵撴柇銆傚彧鏈夋湰绾跨▼瀹屾垚杩欎笁涓繃绋嬶紝鍏朵粬绾跨▼鎵嶈兘瀵规暟鎹繘琛屾搷浣溿€傜幇鍦ㄥ氨鐢ㄤ唬鐮佹潵浣撻獙涓€涓嬪惂銆傚湪Java涓紝鎴戜滑鍙互浣跨敤AtomicInteger瀵规暣鍨嬫暟鎹繘琛屽師瀛愭搷浣滐細importjava.util.concurrent.atomic.AtomicInteger;鍏叡绫籄tomicDemo{publicstaticvoidmain(String[]args)throwsInterruptedException{AtomicIntegerdata=newAtomicInteger();鏁版嵁闆嗭紙0锛夛紱//灏嗘暟鎹垵濮嬪寲涓?Threadt1=newThread(()->{for(inti=0;i<100000;i++){data.addAndGet(1);//鍘熷瓙鍦板悜鏁版嵁鍔?}});Threadt2=newThread(()->{for(inti=0;i<100000;i++){data.addAndGet(1);//鏁版嵁鍘熷瓙鍔?}});//鍚姩涓や釜绾跨▼t1.start();t2.寮€濮嬶紙锛夛紱//绛夊緟涓や釜绾跨▼瀹屾垚t1.join();t2.join();//鎵撳嵃鏈€缁堢粨鏋淪ystem.out.println(data);//200000}}浠庝笂闈㈢殑浠g爜鍒嗘瀽鎴戜滑鍙互鐭ラ亾锛屽鏋滄槸涓€涓竴鑸殑鏁村瀷鍙橀噺锛屼袱涓嚎绋嬪悓鏃舵搷浣滐紝鏈€鍚庣殑缁撴灉浼氬皬浜?00000銆傜幇鍦ㄦ垜浠潵妯℃嫙涓€涓棶棰樼殑杩囩▼涓€鑸暣鍨嬪彉閲忥細涓诲瓨涓璬ata鐨勫垵鍊肩瓑浜?锛屼袱涓嚎绋嬪緱鍒扮殑data鍒濆€奸兘绛変簬0銆傜幇鍦ㄧ嚎绋?缁檇ata鍔?锛岀劧鍚庣嚎绋?鍚屾鐨勫€兼暟鎹繑鍥炲埌涓诲瓨鍌ㄥ櫒銆傛暣涓唴瀛樹腑鐨勬暟鎹彉鍖栧涓嬶細鐜板湪绾跨▼2缁檇ata鍔?锛岀劧鍚庢妸data鐨勫€煎悓姝ュ洖涓诲瓨锛堜富瀛樺師鏉ョ殑鍊艰瑕嗙洊锛夛細鎴戜滑鏈潵鎯虫妸data鐨勫€肩粡杩囦笂闈㈢殑鏀瑰姩鍚庡彉鎴愪簡2锛屼絾鏄嚎绋?瑕嗙洊浜嗘垜浠殑鍊硷紝鎵€浠ュ湪澶氱嚎绋嬬殑鎯呭喌涓嬶紝鎴戜滑鏈€鍚庣殑缁撴灉浼氭洿灏忋€備絾鏄湪涓婇潰鐨勭▼搴忎腑锛屾垜浠渶缁堢殑杈撳嚭鏄瓑浜?0000銆傝繖鏄洜涓哄鏁版嵁+1鐨勬搷浣滄槸鍘熷瓙鐨勶紝涓嶅彲鍒嗗壊鐨勶紝鍦ㄦ搷浣滆繃绋嬩腑鍏朵粬绾跨▼涓嶈兘瀵规暟鎹繘琛屾搷浣溿€傝繖灏辨槸鍘熷瓙鎬х殑浼樺娍銆傝嚜宸卞啓鑷棆閿丄tomicInteger绫讳簡瑙d簡鍘熷瓙鎬х殑浣滅敤涔嬪悗锛屾垜浠啀浜嗚В涓€涓婣tomicInteger绫荤殑鍙︿竴涓師瀛愭搷浣溾€斺€攃ompareAndSet銆傛鎿嶄綔绉颁负姣旇緝鍜屼氦鎹?CAS)锛屽畠鏄師瀛愮殑銆?publicstaticvoidmain(String[]args){AtomicIntegeratomicInteger=newAtomicInteger();atomicInteger.set(0);atomicInteger.compareAndSet(0,1);}compareAndSet鍑芥暟鐨勫惈涔夛細棣栧厛浼氭瘮杈冪涓€涓弬鏁帮紙瀵瑰簲涓婇潰浠g爜涓?锛夊拰atomicInteger鐨勫€笺€傚鏋滅浉绛夊垯杩涜浜ゆ崲锛屽嵆鎶奱tomicInteger鐨勫€艰缃负绗簩涓弬鏁帮紙瀵瑰簲涓婇潰浠g爜涓?锛夈€傚鏋滆繖浜涙搷浣滄垚鍔燂紝鍒檆ompareAndSet鍑芥暟杩斿洖true銆傚鏋滄搷浣滃け璐ワ紝鍒欒繑鍥瀎alse銆傝鎿嶄綔鍙兘浼氬け璐ワ紝鍥犱负绗竴涓弬鏁扮殑鍊硷紙棰勬湡鍊硷級涓嶇瓑浜巃tomicInteger銆傚鏋滅浉绛夛紝鍦ㄦ敼鍙榓tomicInteger鐨勫€兼椂涔熷彲鑳戒細澶辫触锛堝洜涓哄彲鑳芥湁澶氫釜绾跨▼鍦ㄨ繍琛岋紝鍥犱负鍘熷瓙鎬х殑瀛樺湪锛屽彧鏈変竴涓嚎绋嬫墠鑳借繍琛屾垚鍔燂級銆傝嚜鏃嬮攣鐨勫疄鐜板師鐞嗘垜浠彲浠ヤ娇鐢ˋtomicInteger绫绘潵瀹炵幇鑷棆閿併€傛垜浠彲浠ョ敤0鍊艰〃绀烘病鏈夐攣瀹氾紝1鍊艰〃绀哄凡缁忛攣瀹氥€侫tomicInteger绫荤殑鍒濆鍊间负0銆傚湪鍔犻攣鐨勬椂鍊欙紝鎴戜滑鍙互浣跨敤浠g爜atomicInteger.compareAndSet(0,1)鏉ュ疄鐜般€傛垜浠凡缁忔彁鍒板彧鏈変竴涓嚎绋嬪彲浠ュ畬鎴愯繖涓搷浣滐紝涔熷氨鏄鍙湁涓€涓嚎绋嬪彲浠ヨ皟鐢ㄨ繖琛屼唬鐮佸苟杩斿洖true锛屽叾浣欑嚎绋嬭繑鍥瀎alse锛岃€岃繖浜涜繑鍥瀎alse鐨勭嚎绋嬫槸涓嶈兘杩涘叆涓寸晫鍖虹殑锛屾墍浠ユ垜浠渶瑕佽繖浜涚嚎绋嬪仠鍦╝tomicInteger.compareAndSet(0,1)杩欒浠g爜涓嶈兘寰€涓嬫墽鈥嬧€嬭锛屾垜浠彲浠ョ敤涓€涓獁hile寰幆璁╄繖浜涚嚎绋嬪仠鍦ㄨ繖閲寃hile(!value.compareAndSet(0,1));锛屽彧鏈夎繑鍥瀟rue鐨勭嚎绋嬫墠鑳借烦鍑哄惊鐜紝鍏朵綑鐨勭嚎绋嬩細涓€鐩村惊鐜埌杩欓噷銆傛垜浠О杩欑琛屼负涓鸿嚜鏃嬶紝杩欑閿佸洜姝や篃琚О涓鸿嚜鏃嬮攣銆傚綋绾跨▼閫€鍑轰复鐣屽尯鏃讹紝闇€瑕侀噸鏂拌皟鏁撮攣鐘舵€佷负瑙i攣鐘舵€併€傛垜浠彲浠ヤ娇鐢ㄤ唬鐮乿alue.compareAndSet(1,0);灏嗛攣瀹氱姸鎬佹仮澶嶅埌瑙i攣鐘舵€併€傝繖鏍峰叾浠栬嚜鏃嬬嚎绋嬪氨鍙互鎷垮埌閿佽繘鍏ヤ复鐣屽尯銆傝嚜鏃嬮攣浠g爜瀹炵幇importjava.util.concurrent.atomic.AtomicInteger;publicclassSpinLock{//0琛ㄧず瑙i攣鐘舵€?/1琛ㄧず閿佸畾鐘舵€乸rotectedAtomicIntegervalue;publicSpinLock(){this.value=newAtomicInteger();//璁剧疆value鐨勫垵濮嬪€间负0琛ㄧず瑙i攣鐘舵€乼his.value.set(0);}publicvoidlock(){//鎵ц鑷棆鎿嶄綔while(!value.compareAndSet(0,1));}publicvoidunlock(){//灏嗛攣鐨勭姸鎬佽缃负瑙i攣鐘舵€乿alue.compareAndSet(1,0);}}涓婇潰鏄垜浠嚜宸辩殑鑷棆閿佺殑浠g爜锛岀湅浼煎お绠€鍗曚簡锛屼絾鏄‘瀹炲府鍔╂垜浠疄鐜颁簡涓€涓彲浠ュ湪瀹為檯鍦烘櫙涓娇鐢ㄧ殑閿併€傜幇鍦ㄦ垜浠敤浠g爜鏉ユ祴璇曚竴涓嬫垜浠笂闈㈠啓鐨勯攣銆傛祴璇曠▼搴忥細publicclassSpinLockTest{publicstaticintdata;publicstaticSpinLocklock=newSpinLock();publicstaticvoidadd(){for(inti=0;i<100000;i++){//lock鍙兘鏈変竴涓嚎绋嬫墽琛宒ata++鎿嶄綔锛屽叾浣欑嚎绋嬪彧鑳芥墽琛寃hile寰幆lock.lock();鏁版嵁++锛涢攣瀹氥€傝В閿侊紙锛夛紱}}publicstaticvoidmain(String[]args)throwsInterruptedException{Thread[]threads=newThread[100];//璁剧疆100涓嚎绋媐or(inti=0;i<100;i++){threads[i]=newThread(SpinLockTest::add);}//鍚姩100涓嚎绋媐or(inti=0;i<100;i++){threads[i].start();}//绛夊緟杩?00涓嚎绋嬪畬鎴恌or(inti=0;i<100;i++){threads[i].join();}System.out.println(鏁版嵁);//10000000}}鍦ㄤ笂闈㈢殑浠g爜鍒楄〃涓紝鎴戜滑浣跨敤浜?00涓嚎绋嬶紝鐒跺悗姣忎釜绾跨▼寰幆鎵ц100000娆ata++鎿嶄綔銆備笂闈唬鐮佹渶缁堣緭鍑虹殑缁撴灉鏄?0000000锛岀瓑浜庢垜浠鏈熺殑缁撴灉锛岃鏄庢垜浠疄鐜扮殑鑷棆閿佹槸姝g‘鐨勩€傝嚜宸卞啓鍙噸鍏ヨ嚜鏃嬮攣鍙噸鍏ヨ嚜鏃嬮攣鍦ㄤ笂闈㈠疄鐜扮殑鑷棆閿佷腑宸茬粡鍙互婊¤冻鎴戜滑鐨勪竴浜涘熀鏈渶姹傦紝鍗充竴娆″彧鑳芥湁涓€涓嚎绋嬫墽琛屼复鐣屽尯涓殑浠g爜銆備絾鏄笂闈㈢殑浠g爜涓嶈兘婊¤冻鍙噸鍏ョ殑瑕佹眰锛屼篃灏辨槸璇翠笂闈㈠啓鐨勮嚜鏃嬮攣涓嶆槸鍙噸鍏ョ殑鑷棆閿併€傚疄闄呬笂锛屼笂闈㈠疄鐜扮殑鑷棆閿佷腑鐨勯噸鍏ヤ細浜х敓姝婚攣銆傛垜浠敤涓€娈典唬鐮佹潵妯℃嫙涓婇潰閲嶅叆瀵艰嚧鐨勬閿侊細publicstaticvoidadd(intstate)throwsInterruptedException{TimeUnit.SECONDS.sleep(1);濡傛灉锛堢姸鎬?=3锛墈lock.lock();System.out.println(Thread.currentThread().getName()+"\t杩涘叆涓寸晫鍖虹姸鎬?"+state);瀵逛簬(inti=0;i<10;i++)鏁版嵁++;娣诲姞锛堢姸鎬?1锛?//鍦ㄩ€掑綊閲嶅叆涔嬪墠锛岄攣鐘舵€佸凡缁忔槸1锛屽洜涓烘湰绾跨▼宸茬粡杩涘叆涓寸晫鍖簂ock.unlock();}}灏嗕笂闈唬鐮佷腑鎴戜滑浼犲叆鐨勫弬鏁皊tate鐨勫€煎姞1锛岄偅涔堝湪绾跨▼鎵цfor寰幆锛屽啀娆¢€掑綊璋冪敤add鍑芥暟鏃讹紝state鐨勫€煎彉涓?銆傚鏋滄潯浠朵粛鐒舵弧瓒筹紝鏈嚎绋嬩篃闇€瑕侀噸鏂拌幏鍙栭攣锛屼絾鏄鏃堕攣鐘舵€佷负1锛屾湰绾跨▼宸茬粡鑾峰彇杩囦竴娆¢攣锛屼絾鏄嚜鏃嬮攣鏈熸湜鐨勯攣鐘舵€佷负0锛屽洜涓哄彧鏈夎繖鏍蜂粬鎵嶈兘寰楀埌thelock鍐嶆鑾峰彇閿侊紝杩涘叆涓寸晫鍖猴紝浣嗘槸鐜板湪閿佺姸鎬佷负1锛屼篃灏辨槸璇达紝杩欎釜绾跨▼铏界劧宸茬粡鑾峰彇浜嗕竴娆¢攣锛屼絾鏄細缁х画鎵цwhile寰幆锛屾案杩滃嚭涓嶆潵锛岃繖鏍峰氨褰㈡垚浜嗕竴涓兊灞€銆傚彲閲嶅叆鑷棆閿佺殑鎬濊矾閴翠簬浠ヤ笂鎯呭喌锛屾垜浠渶瑕佸疄鐜颁竴涓彲閲嶅叆鑷棆閿併€傛垜浠殑鎬濊矾澶ц嚧鏄繖鏍风殑锛氬湪鎴戜滑瀹炵幇鐨勮嚜鏃嬮攣涓紝鍙互鍔犲叆涓や釜鍙橀噺锛屼竴涓负owner淇濆瓨褰撳墠鎷ユ湁閿佺殑绾跨▼锛岀粺璁′竴涓綋鍓嶇嚎绋嬭繘鍏ラ攣鐨勬鏁扮殑璁板綍銆傚鏋滅嚎绋嬭幏寰椾簡閿侊紝owner=Thread.currentThread()andcount=1銆傚綋绾跨▼涓嬫瑕佽幏寰楅攣鏃讹紝鍏堟鏌wner鏄惁鎸囧悜鑷繁锛岀劧鍚庝竴鐩村惊鐜€傚鏋滄槸锛屽垯鐩存帴鎵цcount++鎿嶄綔锛岀劧鍚庤繘鍏ヤ复鐣屽尯銆傚綋鎴戜滑绂诲紑涓寸晫鍖虹殑鏃跺€欙紝濡傛灉count澶т簬1锛屽氨璇存槑绾跨▼閲嶆柊杩涘叆浜嗛攣锛屾墍浠ユ垜浠笉鑳界洿鎺ユ妸閿佺疆0锛屼篃灏辨槸瑙i攣鐘舵€併€傝繖绉嶆儏鍐典笅锛岀洿鎺ユ墽琛宑ount--鎿嶄綔锛屽鏋渃ount绛変簬1锛岃鏄庣嚎绋嬪綋鍓嶇姸鎬佷笉鏄彲閲嶅叆鐘舵€侊紙閲嶅叆鍚庡彲鑳戒細閫掑綊杩斿洖锛夛紝鎵€浠ラ渶瑕佸姞閿佺姸鎬佸湪绂诲紑涓寸晫鍖轰箣鍓嶈缃负0锛屽嵆瑙i攣鐘舵€侊紝浠ヤ究鍏朵粬绾跨▼鍙互鑾峰緱閿併€傚彲閲嶅叆閿佷唬鐮佸疄鐜帮細瀹炵幇鐨勫彲閲嶅叆閿佷唬鐮佸涓嬶細publicclassReentrantSpinLockextendsSpinLock{privateThreadowner;绉佷汉鏁存暟璁℃暟锛汙Overridepublicvoidlock(){if(owner==null||owner!=Thread.currentThread()){while(!value.compareAndSet(0,1));owner=Thread.currentThread();璁℃暟=1锛泒else{璁℃暟++;}}@Overridepublicvoidunlock(){if(count==1){count=0;value.compareAndSet(1,0);}鍚﹀垯绠?-;}}鎺ヤ笅鏉ワ紝鎴戜滑浣跨敤閫掑綊绋嬪簭鏉ラ獙璇佹垜浠紪鍐欑殑鍙噸鍏ヨ嚜鏃嬮攣鏄惁鍙互鎴愬姛杩愯銆傛祴璇曠▼搴忥細importjava.util.concurrent.TimeUnit;publicclassReentrantSpinLockTest{publicstaticintdata;publicstaticReentrantSpinLocklock=newReentrantSpinLock();publicstaticvoidadd(intstate)throwsInterruptedException{TimeUnit.SECONDS.sleep(1);濡傛灉锛堢姸鎬?=3锛墈lock.lock();System.out.println(Thread.currentThread().getName()+"\t杩涘叆涓村鍖簊tate="+state);瀵逛簬(inti=0;i<10;i++)鏁版嵁++;娣诲姞锛堢姸鎬?1锛夛紱閿佸畾銆傝В閿侊紙锛夛紱}}publicstaticvoidmain(String[]args)throwsInterruptedException{Thread[]threads=newThread[10];for(inti=0;i<10;i++){threads[i]=newThread(newThread(()->{try{ReentrantSpinLockTest.add(1);}catch(InterruptedExceptione){e.printStackTrace();}},String.valueOf(i)));}for(inti=0;i<10;i++){threads[i].start();}瀵逛簬(inti=0;i<10;i++){threads[i].join();}System.out.println(鏁版嵁);}}涓婇潰绋嬪簭鐨勮緭鍑猴細Thread-3杩涘叆涓寸晫鍖虹姸鎬?1Thread-3杩涘叆涓寸晫鍖虹姸鎬?2Thread-3杩涘叆涓寸晫鍖虹姸鎬?3Thread-0杩涘叆涓寸晫鍖虹姸鎬?1Thread-0杩涘叆涓寸晫鍖虹姸鎬?2Thread-0杩涘叆涓寸晫鍖虹姸鎬?3Thread-9杩涘叆涓寸晫鍖虹姸鎬?1Thread-9杩涘叆涓寸晫鍖虹姸鎬?2Thread-9杩涘叆涓寸晫鍖虹姸鎬?3Thread-4杩涘叆涓寸晫鍖虹姸鎬?1Thread-4杩涘叆涓寸晫鍖虹姸鎬?2Thread-4杩涘叆涓寸晫鍖虹姸鎬?3Thread-7杩涘叆涓寸晫鍖虹姸鎬?1Thread-7杩涘叆涓寸晫鍖虹姸鎬?2Thread-7杩涘叆涓寸晫鍖虹姸鎬?3Thread-8杩涘叆涓寸晫鍖虹姸鎬?1Thread-8杩涘叆涓寸晫鍖虹姸鎬乤reastate=2Thread-8杩涘叆涓寸晫鍖簊tate=3Thread-5杩涘叆涓寸晫鍖簊tate=1Thread-5杩涘叆涓寸晫鍖簊tate=2Thread-5杩涘叆涓寸晫鍖簊tate=3Thread-2杩涘叆涓寸晫鍖簊tate=1Thread-2杩涘叆涓寸晫鍖篴reastate=2Thread-2杩涘叆涓寸晫鍖簊tate=3Thread-6杩涘叆涓寸晫鍖簊tate=1Thread-6杩涘叆涓寸晫鍖簊tate=2Thread-6杩涘叆涓寸晫鍖簊tate=3Thread-1杩涘叆涓寸晫鍖簊tate=1Thread-1杩涘叆涓寸晫鍖虹姸鎬?2Thread-1杩涘叆涓寸晫鍖虹姸鎬?3300浠庝笂闈㈢殑杈撳嚭鎴戜滑鍙互鐭ラ亾锛屽綋涓€涓嚎绋嬭兘澶熻幏鍙栧埌閿佺殑鏃跺€欙紝灏卞彲浠ラ噸鏂拌繘鍏ワ紝鏈€鍚庤緭鍑虹殑缁撴灉涔熸槸姝g‘鐨勶紝浠庤€岄獙璇佹垜浠紪鍐欎簡鍙噸鍏ヨ嚜鏃嬮攣鏈夋晥锛佺患涓婃墍杩帮紝鏈枃涓昏浠嬬粛浜嗚嚜鏃嬮攣鍜屽彲閲嶅叆鑷棆閿佺殑鍘熺悊锛屽苟鍐嶆瀹炵幇銆傚叾瀹炰唬鐮佹瘮杈冪畝鍗曘€傚叧閿槸澶у闇€瑕佺悊娓呴€昏緫锛氭墍璋撹嚜鏃嬮攣灏辨槸閫氳繃while寰幆锛岃鎷垮埌閿佺殑绾跨▼杩涘叆涓寸晫鍖烘墽琛屼唬鐮侊紝璁╂病鏈夋嬁鍒伴攣鐨勭嚎绋嬬户缁瓀hile鏃犻檺寰幆銆傚彲閲嶅叆鐨勬剰鎬濇槸涓€涓嚎绋嬪凡缁忕珵浜変簡涓€鎶婇攣銆傚啀娆$珵浜夐攣鍚庯紝闇€瑕侀噸鏂拌繘鍏ヤ复鐣屽尯浠g爜銆傚鏋滆兘淇濊瘉绾跨▼鍙互閲嶆柊杩涘叆涓寸晫鍖猴紝杩欏氨鍙仛閲嶅叆銆傛垜浠湪瀹炵幇鑷棆閿佺殑鏃跺€欎娇鐢ㄤ簡AtomicInteger绫伙紝鎴戜滑浣跨敤0鍜?杩欎袱涓€兼潵琛ㄧず鏃犻攣鍜岄攣琚崰鐢ㄤ袱绉嶇姸鎬併€傚湪鑾峰彇閿佺殑鏃跺€欙紝鎴戜滑浣跨敤while寰幆涓嶆柇鐨勮繘琛孋AS鎿嶄綔銆傜洿鍒版搷浣滄垚鍔熻繑鍥瀟rue锛岄噴鏀鹃攣鏃朵娇鐢–AS灏嗛攣鐨勭姸鎬佷粠1鍙樹负0銆傚疄鐜板彲閲嶅叆閿佹渶閲嶈鐨勫氨鏄璁板綍鏄摢涓嚎绋嬭幏鍙栦簡閿侊紝鍚屾椂杩橀渶瑕佽褰曡幏鍙栦簡澶氬皯娆¢攣锛屽洜涓烘垜浠湪瑙i攣鐨勬椂鍊欓渶瑕佸垽鏂紝閭d箞閿佺殑鐘舵€佸彧鑳芥槸鏀瑰彉浜嗗綋count=1鐨勬椂鍊欎粠1璁剧疆涓?浠ヤ笂灏辨槸鏈枃鐨勫叏閮ㄥ唴瀹癸紝鎴戞槸LeHung锛屼笅鏈熻锛侊紒锛佹洿澶氱簿褰╁唴瀹瑰悎闆嗗彲浠ヨ闂」鐩細https://github.com/Chang-LeHu...鍏虫敞鍏紬鍙凤細涓€涓病鐢ㄧ殑鐮旂┒鍍э紝瀛︿範鏇村璁$畻鏈虹煡璇嗭紙Java锛孭ython锛岃绠楁満绯荤粺鍩虹锛岀畻娉曞拰鏁版嵁缁撴瀯锛夌煡璇嗐€?/p>
