锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 鍦ㄧ幇浠g殑鎿嶄綔緋葷粺涓紝鏈変竴涓緢閲嶈鐨勬蹇碘曗曠嚎紼嬶紝鍑犱箮鎵鏈夌洰鍓嶆祦琛岀殑鎿嶄綔緋葷粺閮芥敮鎸佺嚎紼嬶紝綰跨▼鏉ユ簮浜庢搷浣滅郴緇熶腑榪涚▼鐨勬蹇碉紝榪涚▼鏈夎嚜宸辯殑铏氭嫙鍦板潃絀洪棿浠ュ強姝f枃孌點佹暟鎹鍙婂爢鏍堬紝鑰屼笖鍚勮嚜鍗犳湁涓嶅悓鐨勭郴緇熻祫婧愶紙渚嬪鏂囦歡銆佺幆澧冨彉閲忕瓑絳夛級銆備笌姝や笉鍚岋紝綰跨▼涓嶈兘鍗曠嫭瀛樺湪錛屽畠渚濋檮浜庤繘紼嬶紝鍙兘鐢辮繘紼嬫淳鐢熴傚鏋滀竴涓繘紼嬫淳鐢熷嚭浜嗕袱涓嚎紼嬶紝閭h繖涓や釜綰跨▼鍏變韓姝よ繘紼嬬殑鍏ㄥ眬鍙橀噺鍜屼唬鐮佹錛屼絾姣忎釜綰跨▼鍚勬嫢鏈夊悇鑷殑鍫嗘爤錛屽洜姝ゅ畠浠嫢鏈夊悇鑷殑灞閮ㄥ彉閲忥紝綰跨▼鍦║NIX緋葷粺涓繕琚繘涓姝ュ垎涓虹敤鎴風(fēng)駭綰跨▼錛堢敱榪涚▼鑷凡鏉ョ鐞嗭級鍜岀郴緇熺駭綰跨▼錛堢敱鎿嶄綔緋葷粺鐨勮皟搴︾▼搴忔潵綆$悊錛夈?br />
銆銆鏃㈢劧鏈変簡榪涚▼錛屼負浠涔堣繕瑕佹彁鍑虹嚎紼嬬殑姒傚康鍛紵鍥犱負涓庡垱寤轟竴涓柊鐨勮繘紼嬬浉姣旓紝鍒涘緩涓涓嚎紼嬪皢浼氳楄垂灝忓緱澶氱殑緋葷粺璧勬簮錛屽浜庝竴浜涘皬鍨嬬殑搴旂敤錛屽彲鑳芥劅瑙変笉鍒拌繖鐐癸紝浣嗗浜庨偅浜涘茍鍙戣繘紼嬫暟鐗瑰埆澶氱殑搴旂敤錛屼嬌鐢ㄧ嚎紼嬩細姣斾嬌鐢ㄨ繘紼嬭幏寰楁洿濂界殑鎬ц兘錛屼粠鑰岄檷浣庢搷浣滅郴緇熺殑璐熸媴銆傚彟澶栵紝綰跨▼鍏變韓鍒涘緩瀹冪殑榪涚▼鐨勫叏灞鍙橀噺錛屽洜姝ょ嚎紼嬮棿鐨勯氳緙栫▼浼氭洿灝嗙畝鍗曪紝瀹屽叏鍙互鎶涘純浼犵粺鐨勮繘紼嬮棿閫氳鐨処PC緙栫▼錛岃岄噰鐢ㄥ叡浜叏灞鍙橀噺鏉ヨ繘琛岀嚎紼嬮棿閫氳銆?br />
銆銆鏈変簡涓婇潰榪欎釜姒傚康錛屾垜浠笅闈㈠氨榪涘叆姝i錛屾潵鐪嬩竴涓嬬嚎紼嬫睜絀剁珶鏄庝箞涓鍥炰簨錛熷叾瀹炵嚎紼嬫睜鐨勫師鐞嗗緢綆鍗曪紝綾諱技浜庢搷浣滅郴緇熶腑鐨勭紦鍐插尯鐨勬蹇碉紝瀹冪殑嫻佺▼濡備笅錛氬厛鍚姩鑻ュ共鏁伴噺鐨勭嚎紼嬶紝騫惰榪欎簺綰跨▼閮藉浜庣潯鐪犵姸鎬侊紝褰撳鎴風(fēng)鏈変竴涓柊璇鋒眰鏃訛紝灝變細鍞ら啋綰跨▼姹犱腑鐨勬煇涓涓潯鐪犵嚎紼嬶紝璁╁畠鏉ュ鐞嗗鎴風(fēng)鐨勮繖涓姹傦紝褰撳鐞嗗畬榪欎釜璇鋒眰鍚庯紝綰跨▼鍙堝浜庣潯鐪犵姸鎬併傚彲鑳戒綘涔熻浼氶棶錛氫負浠涔堣鎼炲緱榪欎箞楹葷儲錛屽鏋滄瘡褰撳鎴風(fēng)鏈夋柊鐨勮姹傛椂錛屾垜灝卞垱寤轟竴涓柊鐨勭嚎紼嬩笉灝卞畬浜嗭紵榪欎篃璁告槸涓笉閿欑殑鏂規(guī)硶錛屽洜涓哄畠鑳戒嬌寰椾綘緙栧啓浠g爜鐩稿瀹規(guī)槗涓浜涳紝浣嗕綘鍗村拷鐣ヤ簡涓涓噸瑕佺殑闂鈥曗曟ц兘錛佸氨鎷挎垜鎵鍦ㄧ殑鍗曚綅鏉ヨ錛屾垜鐨勫崟浣嶆槸涓涓渷綰ф暟鎹ぇ闆嗕腑鐨勯摱琛?a class="wordstyle" target="_blank">緗戠粶涓績錛岄珮宄版湡姣忕鐨勫鎴風(fēng)璇鋒眰騫跺彂鏁拌秴榪?00錛屽鏋滀負姣忎釜瀹㈡埛绔姹傚垱寤轟竴涓柊綰跨▼鐨勮瘽錛岄偅鑰楄垂鐨凜PU鏃墮棿鍜屽唴瀛樺皢鏄儕浜虹殑錛屽鏋滈噰鐢ㄤ竴涓嫢鏈?00涓嚎紼嬬殑綰跨▼姹狅紝閭e皢浼氳妭綰﹀ぇ閲忕殑鐨勭郴緇熻祫婧愶紝浣垮緱鏇村鐨凜PU鏃墮棿鍜屽唴瀛樼敤鏉ュ鐞嗗疄闄呯殑鍟嗕笟搴旂敤錛岃屼笉鏄綣佺殑綰跨▼鍒涘緩涓庨攢姣併?br />
銆銆鏃㈢劧涓鍒囬兘鏄庣櫧浜嗭紝閭f垜浠氨寮濮嬬潃鎵嬪疄鐜頒竴涓湡姝g殑綰跨▼姹犲惂錛岀嚎紼嬬紪紼嬪彲浠ユ湁澶氱璇█鏉ュ疄鐜幫紝渚嬪C銆丆錛嬶紜銆乯ava絳夌瓑錛屼絾涓嶅悓鐨勬搷浣滅郴緇熸彁渚涗笉鍚岀殑綰跨▼API鎺ュ彛錛屼負浜嗚浣犺兘鏇存槑鐧界嚎紼嬫睜鐨勫師鐞嗚岄伩鍏嶉櫡鍏ョ儲鐞愮殑API璋冪敤涔嬩腑錛屾垜閲囩敤浜咼AVA璇█鏉ュ疄鐜板畠錛岀敱浜嶫AVA璇█鏄竴縐嶈法騫沖彴鐨勮璦錛屽洜姝や綘涓嶅繀涓轟嬌鐢ㄤ笉鍚岀殑鎿嶄綔緋葷粺鑰屾棤娉曠紪璇戣繍琛屾湰紼嬪簭鑰岃嫤鎭鹼紝鍙浣犲畨瑁呬簡JDK1.2浠ヤ笂鐨勭増鏈紝閮借兘姝g‘鍦扮紪璇戣繍琛屾湰紼嬪簭銆傚彟澶朖AVA璇█鏈韓灝卞唴緗簡綰跨▼瀵硅薄錛岃屼笖JAVA璇█鏄畬鍏ㄩ潰鍍忓璞$殑錛屽洜姝よ兘澶熻浣犳洿娓呮櫚鍦頒簡瑙g嚎紼嬫睜鐨勫師鐞嗭紝濡傛灉浣犳敞鎰忕湅涓涓嬫湰鏂囩殑鏍囬錛屼綘浼氬彂鐜版暣涓ず渚嬬▼搴忕殑浠g爜鍙湁澶х害100琛屻?br />
銆銆鏈ず渚嬬▼搴忕敱涓変釜綾繪瀯鎴愶紝絎竴涓槸TestThreadPool綾伙紝瀹冩槸涓涓祴璇曠▼搴忥紝鐢ㄦ潵妯℃嫙瀹㈡埛绔殑璇鋒眰錛屽綋浣犺繍琛屽畠鏃訛紝緋葷粺棣栧厛浼氭樉紺虹嚎紼嬫睜鐨勫垵濮嬪寲淇℃伅錛岀劧鍚庢彁紺轟綘浠庨敭鐩樹笂杈撳叆瀛楃涓詫紝騫舵寜涓嬪洖杞﹂敭錛岃繖鏃朵綘浼氬彂鐜板睆騫曚笂鏄劇ず淇℃伅錛屽憡璇変綘鏌愪釜綰跨▼姝e湪澶勭悊浣犵殑璇鋒眰錛屽鏋滀綘蹇熷湴杈撳叆涓琛岃瀛楃涓詫紝閭d箞浣犱細鍙戠幇綰跨▼姹犱腑涓嶆柇鏈夌嚎紼嬭鍞ら啋錛屾潵澶勭悊浣犵殑璇鋒眰錛屽湪鏈緥涓紝鎴戝垱寤轟簡涓涓嫢鏈?0涓嚎紼嬬殑綰跨▼姹狅紝濡傛灉綰跨▼姹犱腑娌℃湁鍙敤綰跨▼浜嗭紝緋葷粺浼氭彁紺轟綘鐩稿簲鐨勮鍛婁俊鎭紝浣嗗鏋滀綘紼嶇瓑鐗囧埢錛岄偅浣犱細鍙戠幇灞忓箷涓婁細闄嗛檰緇畫鎻愮ず鏈夌嚎紼嬭繘鍏ヤ簡鐫$湢鐘舵侊紝榪欐椂浣犲張鍙互鍙戦佹柊鐨勮姹備簡銆?br />
銆銆絎簩涓被鏄疶hreadPoolManager綾伙紝欏懼悕鎬濅箟錛屽畠鏄竴涓敤浜庣鐞嗙嚎紼嬫睜鐨勭被錛屽畠鐨勪富瑕佽亴璐f槸鍒濆鍖栫嚎紼嬫睜錛屽茍涓哄鎴風(fēng)鐨勮姹傚垎閰嶄笉鍚岀殑綰跨▼鏉ヨ繘琛屽鐞嗭紝濡傛灉綰跨▼姹犳弧浜嗭紝瀹冧細瀵逛綘鍙戝嚭璀﹀憡淇℃伅銆?br />
銆銆鏈鍚庝竴涓被鏄疭impleThread綾伙紝瀹冩槸Thread綾葷殑涓涓瓙綾伙紝瀹冩墠鐪熸瀵瑰鎴風(fēng)鐨勮姹傝繘琛屽鐞嗭紝SimpleThread鍦ㄧず渚嬬▼搴忓垵濮嬪寲鏃墮兘澶勪簬鐫$湢鐘舵侊紝浣嗗鏋滃畠鎺ュ彈鍒頒簡ThreadPoolManager綾誨彂榪囨潵鐨勮皟搴︿俊鎭紝鍒欎細灝嗚嚜宸卞敜閱掞紝騫跺璇鋒眰榪涜澶勭悊銆?
銆銆棣栧厛鎴戜滑鏉ョ湅涓涓婽estThreadPool綾葷殑婧愮爜錛?br />
//TestThreadPool.java
1 import java.io.*;
2
3
4 public class TestThreadPool
5 {
6 public static void main(String[] args)
7 {
8 try{
9 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
10 String s;
11 ThreadPoolManager manager = new ThreadPoolManager(10);
12 while((s = br.readLine()) != null)
13 {
14 manager.process(s);
15 }
16 }catch(IOException e){}
17 }
18 }
銆銆鐢變簬姝ゆ祴璇曠▼搴忕敤鍒頒簡杈撳叆杈撳叆綾伙紝鍥犳絎?琛屽鍏ヤ簡JAVA鐨勫熀鏈琁O澶勭悊鍖咃紝鍦ㄧ11琛屼腑錛屾垜浠垱寤轟簡涓涓悕涓簃anager鐨勭被錛屽畠緇橳hreadPoolManager綾葷殑鏋勯犲嚱鏁頒紶閫掍簡涓涓間負10鐨勫弬鏁幫紝鍛婅瘔ThreadPoolManager綾伙細鎴戣涓涓湁10涓嚎紼嬬殑姹狅紝緇欐垜鍒涘緩涓涓惂錛佺12琛岃嚦15琛屾槸涓涓棤闄愬驚鐜紝瀹冪敤鏉ョ瓑寰呯敤鎴風(fēng)殑閿叆錛屽茍灝嗛敭鍏ョ殑瀛楃涓蹭繚瀛樺湪s鍙橀噺涓紝騫惰皟鐢═hreadPoolManager綾葷殑process鏂規(guī)硶鏉ュ皢榪欎釜璇鋒眰榪涜澶勭悊銆?br />
銆銆涓嬮潰鎴戜滑鍐嶈繘涓姝ヨ窡韙埌ThreadPoolManager綾諱腑鍘伙紝浠ヤ笅鏄畠鐨勬簮浠g爜錛?br />
//ThreadPoolManager.java
1 import java.util.*;
2
3
4 class ThreadPoolManager
5 {
6
7 private int maxThread;
8 public Vector vector;
9 public void setMaxThread(int threadCount)
10 {
11 maxThread = threadCount;
12 }
13
14 public ThreadPoolManager(int threadCount)
15 {
16 setMaxThread(threadCount);
17 System.out.println("Starting thread pool...");
18 vector = new Vector();
19 for(int i = 1; i <= 10; i++)
20 {
21 SimpleThread thread = new SimpleThread(i);
22 vector.addElement(thread);
23 thread.start();
24 }
25 }
26
27 public void process(String argument)
28 {
29 int i;
30 for(i = 0; i < vector.size(); i++)
31 {
32 SimpleThread currentThread = (SimpleThread)vector.elementAt(i);
33 if(!currentThread.isRunning())
34 {
35 System.out.println("Thread "+ (i+1) +" is processing:" +
argument);
36 currentThread.setArgument(argument);
37 currentThread.setRunning(true);
38 return;
39 }
40 }
41 if(i == vector.size())
42 {
43 System.out.println("pool is full, try in another time.");
44 }
45 }
46 }//end of class ThreadPoolManager
銆銆鎴戜滑鍏堝叧娉ㄤ竴涓嬭繖涓被鐨勬瀯閫犲嚱鏁幫紝鐒跺悗鍐嶇湅瀹冪殑process()鏂規(guī)硶銆傜16錛?4琛屾槸瀹冪殑鏋勯犲嚱鏁幫紝棣栧厛瀹冪粰ThreadPoolManager綾葷殑鎴愬憳鍙橀噺maxThread璧嬪鹼紝maxThread琛ㄧず鐢ㄤ簬鎺у埗綰跨▼姹犱腑鏈澶х嚎紼嬬殑鏁伴噺銆傜18琛屽垵濮嬪寲涓涓暟緇剉ector錛屽畠鐢ㄦ潵瀛樻斁鎵鏈夌殑SimpleThread綾伙紝榪欐椂鍊欏氨鍏呭垎浣撶幇浜咼AVA璇█鐨勪紭瓚婃т笌鑹烘湳鎬э細濡傛灉浣犵敤C璇█鐨勮瘽錛岃嚦灝戣鍐?00琛屼互涓婄殑浠g爜鏉ュ畬鎴恦ector鐨勫姛鑳斤紝鑰屼笖C璇█鏁扮粍鍙兘瀹圭撼綾誨瀷緇熶竴鐨勫熀鏈暟鎹被鍨嬶紝鏃犳硶瀹圭撼瀵硅薄銆傚ソ浜嗭紝闂茶瘽灝戣錛岀19錛?4琛岀殑寰幆瀹屾垚榪欐牱涓涓姛鑳斤細鍏堝垱寤轟竴涓柊鐨凷impleThread綾伙紝鐒跺悗灝嗗畠鏀懼叆vector涓幓錛屾渶鍚庣敤thread.start()鏉ュ惎鍔ㄨ繖涓嚎紼嬶紝涓轟粈涔堣鐢╯tart()鏂規(guī)硶鏉ュ惎鍔ㄧ嚎紼嬪憿錛熷洜涓鴻繖鏄疛AVA璇█涓墍瑙勫畾鐨勶紝濡傛灉浣犱笉鐢ㄧ殑璇濓紝閭h繖浜涚嚎紼嬪皢姘歌繙寰椾笉鍒版縺媧伙紝浠庤屽鑷存湰紺轟緥紼嬪簭鏍規(guī)湰鏃犳硶榪愯銆?br />
銆銆涓嬮潰鎴戜滑鍐嶆潵鐪嬩竴涓媝rocess()鏂規(guī)硶錛岀30錛?0琛岀殑寰幆渚濇浠巚ector鏁扮粍涓夊彇SimpleThread綰跨▼錛屽茍媯鏌ュ畠鏄惁澶勪簬嬋媧葷姸鎬侊紙鎵璋撴縺媧葷姸鎬佹槸鎸囨綰跨▼鏄惁姝e湪澶勭悊瀹㈡埛绔殑璇鋒眰錛夛紝濡傛灉澶勪簬嬋媧葷姸鎬佺殑璇濓紝閭g戶緇煡鎵緑ector鏁扮粍鐨勪笅涓欏癸紝濡傛灉vector鏁扮粍涓墍鏈夌殑綰跨▼閮藉浜庢縺媧葷姸鎬佺殑璇濓紝閭e畠浼氭墦鍗板嚭涓鏉′俊鎭紝鎻愮ず鐢ㄦ埛紼嶅欏啀璇曘傜浉鍙嶅鏋滄壘鍒頒簡涓涓潯鐪犵嚎紼嬬殑璇濓紝閭g35錛?8琛屼細瀵規(guī)榪涜澶勭悊錛屽畠鍏堝憡璇夊鎴風(fēng)鏄摢涓涓嚎紼嬫潵澶勭悊榪欎釜璇鋒眰錛岀劧鍚庡皢瀹㈡埛绔殑璇鋒眰錛屽嵆瀛楃涓瞐rgument杞彂緇橲impleThread綾葷殑setArgument()鏂規(guī)硶榪涜澶勭悊錛屽茍璋冪敤SimpleThread綾葷殑setRunning()鏂規(guī)硶鏉ュ敜閱掑綋鍓嶇嚎紼嬶紝鏉ュ瀹㈡埛绔姹傝繘琛屽鐞嗐?br />
銆銆鍙兘浣犺繕瀵箂etRunning()鏂規(guī)硶鏄庢牱鍞ら啋綰跨▼鐨勬湁浜涗笉鏄庣櫧錛岄偅鎴戜滑鐜板湪灝辮繘鍏ユ渶鍚庝竴涓被錛歋impleThread綾伙紝瀹冪殑婧愪唬鐮佸涓嬶細
//SimpleThread.java
1 class SimpleThread extends Thread
2 {
3 private boolean runningFlag;
4 private String argument;
5 public boolean isRunning()
6 {
7 return runningFlag;
8 }
9 public synchronized void setRunning(boolean flag)
10 {
11 runningFlag = flag;
12 if(flag)
13 this.notify();
14 }
15
16 public String getArgument()
17 {
18 return this.argument;
19 }
20 public void setArgument(String string)
21 {
22 argument = string;
23 }
24
25 public SimpleThread(int threadNumber)
26 {
27 runningFlag = false;
28 System.out.println("thread " + threadNumber + "started.");
29 }
30
31 public synchronized void run()
32 {
33 try{
34 while(true)
35 {
36 if(!runningFlag)
37 {
38 this.wait();
39 }
40 else
41 {
42 System.out.println("processing " + getArgument() + "... done.");
43 sleep(5000);
44 System.out.println("Thread is sleeping...");
45 setRunning(false);
46 }
47 }
48 } catch(InterruptedException e){
49 System.out.println("Interrupt");
50 }
51 }//end of run()
52 }//end of class SimpleThread
銆銆濡傛灉浣犲JAVA鐨勭嚎紼嬬紪紼嬫湁浜涗笉澶槑鐧界殑璇濓紝閭f垜鍏堝湪榪欓噷綆鍗曞湴璁茶В涓涓嬶紝JAVA鏈変竴涓悕涓篢hread鐨勭被錛屽鏋滀綘瑕佸垱寤轟竴涓嚎紼嬶紝鍒欏繀欏昏浠嶵hread綾諱腑緇ф壙錛屽茍涓旇繕瑕佸疄鐜癟hread綾葷殑run()鎺ュ彛錛岃嬋媧諱竴涓嚎紼嬶紝蹇呴』璋冪敤瀹冪殑start()鏂規(guī)硶錛宻tart()鏂規(guī)硶浼氳嚜鍔ㄨ皟鐢╮un()鎺ュ彛錛屽洜姝ょ敤鎴峰繀欏誨湪run()鎺ュ彛涓啓鍏ヨ嚜宸辯殑搴旂敤澶勭悊閫昏緫銆傞偅涔堟垜浠庝箞鏉ユ帶鍒剁嚎紼嬬殑鐫$湢涓庡敜閱掑憿錛熷叾瀹炲緢綆鍗曪紝JAVA璇█涓烘墍鏈夌殑瀵硅薄閮藉唴緗簡wait()鍜宯otify()鏂規(guī)硶錛屽綋涓涓嚎紼嬭皟鐢╳ait()鏂規(guī)硶鏃訛紝鍒欑嚎紼嬭繘鍏ョ潯鐪犵姸鎬侊紝灝卞儚鍋滃湪浜嗗綋鍓嶄唬鐮佷笂浜嗭紝涔熶笉浼氱戶緇墽琛屽畠浠ヤ笅鐨勪唬鐮佷簡錛屽綋璋冪敤notify()鏂規(guī)硶鏃訛紝鍒欎細浠庤皟鐢╳ait()鏂規(guī)硶鐨勯偅琛屼唬鐮佺戶緇墽琛屼互涓嬬殑浠g爜錛岃繖涓繃紼嬫湁鐐瑰儚緙栬瘧鍣ㄤ腑鐨勬柇鐐硅皟璇曠殑姒傚康銆備互鏈▼搴忎負渚嬶紝絎?8琛岃皟鐢ㄤ簡wait()鏂規(guī)硶錛屽垯榪欎釜綰跨▼灝卞儚鍑濆浐浜嗕竴鏍峰仠鍦ㄤ簡38琛屼笂浜嗭紝濡傛灉鎴戜滑鍦ㄧ13琛岃繘琛屼竴涓猲otify()璋冪敤鐨勮瘽錛岄偅綰跨▼浼氫粠絎?8琛屼笂鍞ら啋錛岀戶緇粠絎?9琛屽紑濮嬫墽琛屼互涓嬬殑浠g爜浜嗐?br />
銆銆閫氳繃浠ヤ笂鐨勮榪幫紝鎴戜滑鐜板湪灝變笉闅劇悊瑙impleThread綾諱簡錛岀9錛?4琛岄氳繃璁劇疆涓涓爣蹇梤unningFlag嬋媧誨綋鍓嶇嚎紼嬶紝絎?5錛?9琛屾槸SimpleThread綾葷殑鏋勯犲嚱鏁幫紝瀹冪敤鏉ュ憡璇夊鎴風(fēng)鍚姩鐨勬槸絎嚑鍙瘋繘紼嬨傜31錛?0琛屽垯鏄垜瀹炵幇鐨剅un()鎺ュ彛錛屽畠瀹為檯涓婃槸涓涓棤闄愬驚鐜紝鍦ㄥ驚鐜腑棣栧厛鍒ゆ柇涓涓嬫爣蹇梤unningFlag錛屽鏋滄病鏈塺unningFlag涓篺alse鐨勮瘽錛岄偅綰跨▼澶勭悊鐫$湢鐘舵侊紝鍚﹀垯絎?2錛?5琛屼細榪涜鐪熸鐨勫鐞嗭細鍏堟墦鍗扮敤鎴烽敭鍏ョ殑瀛楃涓詫紝鐒跺悗鐫$湢5縐掗挓錛屼負浠涔堣鐫$湢5縐掗挓鍛紵濡傛灉浣犱笉鍔犱笂榪欏彞浠g爜鐨勮瘽錛岀敱浜庤綆楁満澶勭悊閫熷害榪滆繙瓚呰繃浣犵殑閿洏杈撳叆閫熷害錛屽洜姝や綘鐪嬪埌鐨勬繪槸絎?鍙風(fēng)嚎紼嬫潵澶勭悊浣犵殑璇鋒眰錛屼粠鑰岃揪涓嶅埌婕旂ず鏁堟灉銆傛渶鍚庣45琛岃皟鐢╯etRunning()鏂規(guī)硶鍙堝皢綰跨▼緗簬鐫$湢鐘舵侊紝絳夊緟鏂拌姹傜殑鍒版潵銆?br />
銆銆鏈鍚庤繕鏈変竴鐐硅娉ㄦ剰鐨勬槸錛屽鏋滀綘鍦ㄤ竴涓柟娉曚腑璋冪敤浜唚ait()鍜宯otify()鍑芥暟錛岄偅浣犱竴瀹氳灝嗘鏂規(guī)硶緗負鍚屾鐨勶紝鍗硈ynchronized錛屽惁鍒欏湪緙栬瘧鏃朵細鎶ラ敊錛屽茍寰楀埌涓涓帿鍚嶅叾濡欑殑娑堟伅錛氣渃urrent thread not owner鈥濓紙褰撳墠綰跨▼涓嶆槸鎷ユ湁鑰咃級銆?br />
銆銆鑷蟲涓烘錛屾垜浠畬鏁村湴瀹炵幇浜嗕竴涓嚎紼嬫睜錛屽綋鐒訛紝榪欎釜綰跨▼姹犲彧鏄畝鍗曞湴灝嗗鎴風(fēng)杈撳叆鐨勫瓧絎︿覆鎵撳嵃鍒頒簡灞忓箷涓婏紝鑰屾病鏈夊仛浠諱綍澶勭悊錛屽浜庝竴涓湡姝g殑浼佷笟綰ц繍鐢紝鏈緥榪樻槸榪滆繙涓嶅鐨勶紝渚嬪閿欒澶勭悊銆佺嚎紼嬬殑鍔ㄦ佽皟鏁淬佹ц兘浼樺寲銆佷復(fù)鐣屽尯鐨勫鐞嗐佸鎴風(fēng)鎶ユ枃鐨勫畾涔夌瓑絳夐兘鏄煎緱鑰冭檻鐨勯棶棰橈紝浣嗘湰鏂囩殑鐩殑浠呬粎鍙槸璁╀綘浜嗚В綰跨▼姹犵殑姒傚康浠ュ強瀹冪殑綆鍗曞疄鐜幫紝濡傛灉浣犳兂鎴愪負榪欐柟闈㈢殑楂樻墜錛屾湰鏂囨槸榪滆繙涓嶅鐨勶紝浣犲簲璇ュ弬鑰冧竴浜涙洿澶氱殑璧勬枡鏉ユ繁鍏ュ湴浜嗚В瀹冦?br />
for
聽(
int
聽i聽
=
聽
1
;聽i聽
<=
聽
10
;聽i
++
)聽
{
//
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽int聽i聽=聽7;
聽聽聽聽聽聽聽聽聽聽聽聽MNPClientThread聽mnpct聽
=
聽
new
聽MNPClientThread(i);
聽聽聽聽聽聽聽聽聽聽聽聽mnpct.start();
聽聽聽聽聽聽聽聽聽聽聽聽System.out.println(i);
聽聽聽聽聽聽聽聽}
public
聽MNPClientThread(
int
聽i)聽
{
聽聽聽聽聽聽聽聽
this
.count聽
=
聽i;
聽聽聽聽}
聽聽聽聽
public
聽
void
聽run()聽
{
聽聽聽聽聽聽聽聽
try
聽
{
聽聽聽聽聽聽聽聽聽聽聽聽
for
(
int
聽i
=
1
;i
<=
800000
;i
++
)
{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽StringBuffer聽phoneNumber聽
=
聽
new
聽StringBuffer(
"
88600
"
);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽phoneNumber.append(count);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽phoneNumber.append(
"
0000
"
);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽phoneNumber.append(i);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽Thread.sleep(
800
);
//
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽System.out.println("****************"+phoneNumber.toString());
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽MNPClientTest聽client聽
=
聽
new
聽MNPClientTest();
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽client.runTest(phoneNumber.toString());
//
聽聽聽聽聽聽聽聽聽聽聽聽java.util.Date聽d2聽=聽new聽java.util.Date();
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽System.out.println(
"
Thread聽
"
聽
+
聽count聽
+
聽
"
聽Runs
"
);
//
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽System.out.println(new聽java.util.Date());
//
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽System.out.println(i);
聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽}
聽
catch
聽(Exception聽ex)聽
{
聽聽聽聽聽聽聽聽聽聽聽聽ex.printStackTrace();
聽聽聽聽聽聽聽聽}
聽聽聽聽}
榪愯3灝忔椂宸﹀彸錛屽彂浜嗕笉鍒?0Wquery灝辨寕浜嗭紵錛燂紵
鎶ヨ繖涓細
Exception in thread "Thread-1" java.lang.OutOfMemoryError: Java heap space
鎴戝姞浜?Xms128m -Xmx800m 榪樻槸涓嶈錛熸槸鍐呭瓨娉勯湶鍚楋紵錛?/span>
http://www.ptsn.net.cn/article_new/show_article.php?article_id=expert_9039d306-6d61-d622-14d5-43c49c788fef
e164:
http://www.mc21st.net/old/faq/reply.asp?ID=7471
IMSI:
http://zhidao.baidu.com/question/7853752.html
http://baike.baidu.com/view/715091.htm
1錛?/span> 浠涔堟槸縐誨姩閫氫俊錛熻兘鍚﹁縐誨姩閫氫俊灝辨槸鈥滄棤綰跨數(shù)閫氫俊鈥濓紵涓轟粈涔堬紵
縐誨姩閫氫俊鏄寚閫氫俊鍙屾柟鎴栬嚦灝戞湁涓鏂瑰湪縐誨姩涓繘琛屼俊鎭氦鎹㈢殑閫氫俊鏂瑰紡銆?/span>
涓嶈兘錛岀Щ鍔ㄩ氫俊鏄湁綰褲佹棤綰跨浉緇撳悎鐨勯氫俊鏂瑰紡銆?/span>
2錛?/span> 縐誨姩閫氫俊鏈夊摢浜涚壒鐐癸紵瀛樺湪鐨勯棶棰樺垎鍒敤鍝簺鏂規(guī)硶瑙e喅錛?/span>
縐誨姩閫氫俊鏄湁綰褲佹棤綰跨浉緇撳悎鐨勯氫俊鏂瑰紡錛涚數(shù)娉紶鎾潯浠舵伓鍔o紝瀛樺湪涓ラ噸鐨勫寰勮“钀斤紱寮哄共鎵版潯浠朵笅宸ヤ綔錛涘叿鏈夊鍗滃嫆鏁堝簲錛涘瓨鍦ㄩ槾褰卞尯錛堢洸鍖猴級錛涚敤鎴風(fēng)粡甯哥Щ鍔ㄣ?/span>
縐誨姩鍙板繀欏諱綋縐灝忋侀噸閲忚杞匯佹搷浣滀嬌鐢ㄨ綆渚垮畨鍏紝鍙﹀錛屽叾鎴愭湰瑕佷綆錛涘湪榪涜縐誨姩閫氫俊緋葷粺鐨勮璁℃椂錛屽繀欏誨叿鏈変竴瀹氱殑鎶楄“钀界殑鑳藉姏鍜屽偍澶囷紱縐誨姩閫氫俊璁懼蹇呴』鍏鋒湁鑹ソ鐨勯夋嫨鎬э紝浣跨敤鑷姩鍔熺巼鎺у埗鐢?shù)璧\錛岀Щ鍔ㄩ氫俊緋葷粺鍦ㄧ粍緗戞椂錛屽繀欏昏冭檻鍚岄騫叉壈錛涢攣鐩告妧鏈紱鑰冭檻闃村獎鍖哄湪緗戠粶瑙勫垝銆佽緗熀绔欐椂錛涗綅緗櫥璁般佽秺鍖哄垏鎹㈠強婕父璁塊棶絳夎窡韙氦鎹㈡妧鏈?/span>
3錛?/span> 縐誨姩閫氫俊甯哥敤鐨勫伐浣滄柟寮忔湁鍝簺錛熷叕鐢ㄨ渹紿濈Щ鍔ㄧ數(shù)璇濈郴緇熶腑浣跨敤鍝簺錛?/span>
鍗曞伐鏂瑰紡錛屽崐鍙屽伐鏂瑰紡錛屽弻宸ユ柟寮忋?/span>
鍙屽伐銆?/span>
4錛?/span> 浠涔堟槸灝忓尯鍒訛紵涓轟粈涔堝皬鍖哄埗鏃㈣兘瑙e喅棰戦亾鏁版湁闄愬拰鐢ㄦ埛鏁板澶х殑鐭涚浘錛屽張鑳戒笉鏂傚簲鐢ㄦ埛鏁板澶х殑闇瑕侊紵
灝忓尯鍒舵槸灝嗘暣涓湇鍔″尯鍒掑垎涓鴻嫢騫蹭釜灝忔棤綰垮尯錛屾瘡涓皬鏃犵嚎鍖哄垎鍒緗竴涓熀绔欒礋璐f湰鍖虹殑縐誨姩閫氫俊鐨勮仈緇滃拰鎺у埗錛屽悓鏃跺張鍙湪 MSC 鐨勭粺涓鎺у埗涓嬶紝瀹炵幇灝忓尯闂寸Щ鍔ㄩ氫俊鐨勮漿鎺ュ強涓庡競璇濈綉鐨勮仈緋匯?/span>
灝忓尯鍒朵腑錛屾瘡涓皬鍖轟嬌鐢ㄤ竴緇勯閬擄紝閭昏繎灝忓尯浣跨敤涓嶅悓鐨勯閬撱傜敱浜庡皬鍖哄唴鍩虹珯鏈嶅姟鍖哄煙緙╁皬錛屽悓棰戝鐢ㄨ窛紱誨噺灝忥紝鎵浠ュ湪鏁翠釜鏈嶅姟鍖轟腑錛屽悓涓緇勯閬撳彲浠ュ嬈¢噸澶嶄嬌鐢紝鍥犺屽ぇ澶ф彁楂樹簡棰戠巼鍒╃敤鐜囥傚彟澶栵紝鍦ㄥ尯鍩熷唴鍙牴鎹敤鎴風(fēng)殑澶氬皯紜畾灝忓尯鐨勫ぇ灝忋傞殢鐫鐢ㄦ埛鏁扮洰鐨勫鍔狅紝灝忓尯榪樺彲浠ョ戶緇垝灝忥紝鍗沖疄鐜扳滃皬鍖哄垎瑁傗濓紝浠ラ傚簲鐢ㄦ埛鏁扮殑澧炲姞銆傚洜姝わ紝灝忓尯鍒惰В鍐充簡澶у尯鍒朵腑瀛樺湪鐨勯閬撴暟鏈夐檺鑰岀敤鎴鋒暟涓嶆柇澧炲姞鐨勭煕鐩撅紝鍙嬌鐢ㄦ埛瀹歸噺澶уぇ澧炲姞銆?/span>
5錛?/span> 鏃犵嚎鍖哄煙鐨勫垝鍒嗕負浠涔堥噰鐢ㄦ鍏竟褰㈠皬鍖哄艦鐘訛紵姝e叚杈瑰艦鏃犵嚎鍖虹兢鏋勬垚搴旀弧瓚充粈涔堟潯浠訛紵
鍋囧畾鏁翠釜鏈嶅姟鍖虹殑鍦板艦鍦扮墿鐩稿悓錛屽茍涓斿熀绔欓噰鐢ㄥ叏鍚戝ぉ綰匡紝瑕嗙洊闈㈢Н澶т綋涓婁笂涓涓渾錛屽嵆鏃犵嚎灝忓尯鏄渾褰㈢殑銆傜敱鑰冭檻鍒板涓皬鍖哄郊姝ら偦鎺ユ潵瑕嗙洊鏁翠釜鍖哄煙錛岀敤鍦嗗唴鎺ユ澶氳竟褰唬鏇垮渾銆傚渾鍐呮帴姝e杈瑰艦褰兼閭繪帴鏋勬垚騫抽潰鏃訛紝鍙兘鏄涓夎褰€佹鏂瑰艦鍜屾鍏竟褰笁縐嶉潰鐘跺尯鍩熴傛鍏竟褰紝鍏剁浉閭誨皬鍖虹殑涓績璺濈鏈灝忥紝渚夸簬瀹炵幇璺熻釜浜ゆ崲錛涘叾瑕嗙洊闈㈢Н鏈澶э紝瀵逛簬鍚屾牱澶у皬鐨勬湇鍔″尯鍩燂紝閲囩敤姝e叚杈瑰艦鏋勬垚灝忓尯鍒舵墍闇鐨勫皬鍖烘暟鏈灝戯紝鍗蟲墍闇鍩虹珯鏁版渶灝戯紱鎵闇鐨勯鐜囦釜鏁版渶灝戯紝棰戠巼鍒╃敤鐜囬珮銆?/span>
婊¤凍浠ヤ笅涓や釜鏉′歡錛氫竴鏄嫢騫插崟浣嶆棤綰垮尯緹よ兘褰兼閭繪帴錛涗簩鏄浉閭誨崟浣嶆棤綰垮尯緹や腑鐨勫悓棰戝皬鍖轟腑蹇冮棿闅旂浉絳夈?/span>
6錛?/span> 浠涔堟槸澶氫俊閬撳叡鐢紵鏈変綍浼樼偣錛?/span>
澶氫俊閬撳叡鐢ㄦ槸鎸囧湪緗戝唴鐨勫ぇ閲忕敤鎴峰叡鍚屼韓鏈夎嫢騫叉棤綰夸俊閬擄紝榪欎笌甯傝瘽鐢ㄦ埛鍏卞悓浜湁涓戶綰跨浉綾諱技銆傜浉瀵逛簬鐙珛淇¢亾鏂瑰紡鏉ヨ錛屽彲浠ユ樉钁楁彁楂樹俊閬撳埄鐢ㄧ巼銆?/span>
7錛?/span> 澶у閲忕殑縐誨姩閫氫俊緋葷粺閲囩敤浣曠淇¢亾閫夋嫨鏂瑰紡錛熸湁浠涔堜紭緙虹偣錛?/span>
涓撶敤鍛煎彨淇¢亾鏂瑰紡銆?/span>
澶勭悊涓嬈″懠鍙繃紼嬫墍闇鐨勬椂闂村緢鐭紝鎵浠ヨ绔嬩竴涓笓鐢ㄥ懠鍙俊閬撳氨鍙互澶勭悊鎴愮櫨涓婂崈涓敤鎴風(fēng)殑鍛煎彨錛岄傜敤浜庡ぇ瀹歸噺緋葷粺涓紱鐢變簬涓撻棬鎶藉嚭涓涓俊閬撲綔鍛煎彨淇¢亾錛岀浉瀵硅岃█錛屽噺灝戜簡閫氳瘽淇¢亾鐨勬暟鐩紝鍥犳瀵瑰皬瀹歸噺緋葷粺鏉ヨ錛屾槸涓嶅悎綆楃殑銆?/span>
8錛?/span> 鑻ラ渶璁捐涓縐誨姩閫氫俊緋葷粺錛岀敤鎴峰閲忚姹備負 600 鎴鳳紝姣忓ぉ姣忎釜鐢ㄦ埛騫沖潎鍛煎彨 5 嬈★紝姣忔騫沖潎鍗犵敤淇¢亾鏃墮棿涓?/span> 60 縐掞紝鍛兼崯鐜囪姹備負 10% 錛屽繖鏃跺嚮涓巼涓?/span> 0.125 錛岄棶闇瑕佸灝戜俊閬撴墠鑳芥弧瓚?/span> 600 涓敤鎴風(fēng)殑闇瑕侊紵
A/A 鐢ㄦ埛 =600
A 鐢ㄦ埛 =CTK/3600=5*60*0.125=37.5/3600
A=6.25
鏌ヨ〃寰楋細 9
9錛?/span> 璇濆姟閲忔槸鎬庢牱瀹氫箟鐨勶紵浠涔堟槸鍛兼崯鐜囷紵鍛兼崯鐜囦笌鎺ラ氳瘽鍔¢噺鐨勫叧緋誨浣曪紵
鍗曚綅鏃墮棿錛?/span> 1 灝忔椂錛夊唴鍛煎彨嬈℃暟涓庢瘡嬈″懠鍙殑騫沖潎鍗犵敤淇¢亾鏃墮棿涔嬬Н銆?/span>
褰撳涓俊閬撳叡鐢ㄦ椂錛岄氬父鎬繪槸鐢ㄦ埛鏁板ぇ浜庝俊閬撴暟錛屽綋澶氫釜鐢ㄦ埛鍚屾椂瑕佹眰鏈嶅姟鑰屼俊閬撴暟涓嶅鏃訛紝鍙兘璁╀竴閮ㄥ垎鐢ㄦ埛鍏堥氳瘽錛屽彟涓閮ㄥ垎鐢ㄦ埛絳変俊閬撶┖闂叉椂鍦ㄩ氳瘽銆傚悗涓閮ㄥ垎鐢ㄦ埛鍥犳棤絀洪棽淇¢亾鑰屼笉鑳介氳瘽錛屽嵆涓哄懠鍙け璐ワ紝綆縐板懠鎹熴傚湪涓涓氫俊緋葷粺涓紝閫犳垚鍛煎彨澶辮觸鐨勬鐜囩О涓哄懠鍙崯澶辨鐜囷紝綆縐板懠鎹熺巼銆?/span>
鍛兼崯鐜囦負鍛煎彨澶辮觸鐨勬鏁頒笌鎬誨懠鍙鏁頒箣鐧懼垎姣斻?/span>
10錛?span style="FONT: 7pt 'Times New Roman'">聽聽聽聽聽聽聽聽聽聽聽聽聽 鐖卞皵鍏板懠鎹熻〃搴旂敤鐨勬潯浠舵槸浠涔堬紵宸茬煡 A 鐢ㄦ埛 =0.02Erl/ 鐢ㄦ埛錛屽鏋滆姹傚懠鎹熺巼涓?/span> 10% 錛岀幇鏈?/span> 70 涓敤鎴鳳紝闇鍏辯敤鐨勯閬撴暟涓哄灝戯紵濡傛灉 920 涓敤鎴峰叡鐢?/span> 18 涓閬擄紝閭d箞鍛兼崯鐜囨槸澶氬皯錛?/span>
姣忔鍛煎彨鐩稿鐙珛錛屼簰涓嶇浉鍏籌紝鍗沖懠鍙叿鏈夐殢鏈烘э紝涔熷氨鏄錛屼竴涓敤鎴瘋姹傞氳瘽鐨勬鐜囦笌姝e湪閫氳瘽鐨勭敤鎴鋒暟鏃犲叧錛涙瘡嬈″懠鍙湪鏃墮棿涓婇兘鏈夌浉鍚岀殑姒傜巼銆?/span>
A/n=70*0.02/n, A=1.4, 鏌ヨ〃寰?/span> n=4
A/n=920*0.02/n, A=18.4, 鏌ヨ〃寰楀懠鎹熺巼涓?/span> 20%
11錛?span style="FONT: 7pt 'Times New Roman'">聽聽聽聽聽聽聽聽聽聽聽聽聽 濡備綍鎻愰珮棰戠巼鍒╃敤鐜?/a>錛?/span>
棰戠巼澶嶇敤銆侀鐜囧崗璋冨拰棰戠巼瑙勫垝
12錛?span style="FONT: 7pt 'Times New Roman'">聽聽聽聽聽聽聽聽聽聽聽聽聽 緋葷粺瀵圭Щ鍔ㄤ氦鎹㈡満鏈夊摢浜涚壒孌婅姹傦紵
鐢ㄦ埛鏁版嵁鐨勫瓨鍌紱鐢ㄦ埛浣嶇疆鐨勭櫥璁幫紱瀵誨懠鐢ㄦ埛鐨勪俊浠ょ郴緇熻瘑鍒強澶勭悊錛涜秺鍖洪閬撹漿鎹㈢殑澶勭悊錛涜繃鑽鋒帶鍒訛紱榪滆窛紱繪。妗堝瓨鍙栵紱璺敱鐨勬帶鍒剁瓑銆?/span>
13錛?span style="FONT: 7pt 'Times New Roman'">聽聽聽聽聽聽聽聽聽聽聽聽聽 浠涔堟槸浣嶇疆鐧昏銆佷竴榻愬懠鍙佽秺鍖哄垏鎹€佹極娓革紵
浣嶇疆鐧昏鏄寚縐誨姩鍙板悜鍩虹珯鍙戦佹姤鏂囷紝琛ㄦ槑鑷繁鎵澶勭殑浣嶇疆鐨勮繃紼嬨?/span>
鑻ヤ綅緗俊鎭〃鏄庤鍛肩Щ鍔ㄧ敤鎴峰湪鏌愪釜浣嶇疆鍖猴紝浣嗕笉鐭ュ叾鎵澶勭殑鍏蜂綋灝忓尯錛屽洜姝わ紝浣嶇疆鍖哄唴鎵鏈夊熀绔欎竴榻愬懠鍑鴻鍛肩Щ鍔ㄧ敤鎴瘋瘑鍒爜錛岃鍙Щ鍔ㄧ敤鎴峰簲絳斿悗錛屽嵆鐢卞簲絳斿皬鍖烘彁渚涙帴緇湇鍔★紝緋葷粺鐨勮繖縐嶅姛鑳界О涓衡滀竴榻愬懠鍙濄?/span>
涓轟簡淇濊瘉閫氫俊鐨勮繛緇э紝姝e湪閫氳瘽鐨勭Щ鍔ㄥ彴浠庝竴涓皬鍖鴻繘鍏ョ浉閭?cè)潥勫彟涓灝忓尯鏃訛紝宸ヤ綔棰戦亾浠庝竴涓棤闄愰閬撲笂杞崲鍒板彟涓涓棤闄愰閬撲笂錛岃岄氳瘽涓嶄腑鏂紝榪欏氨鏄秺鍖哄垏鎹€?/span>
鍦ㄨ仈緗戠殑縐誨姩閫氫俊緋葷粺涓紝縐誨姩鍙頒粠涓涓?/span> MSC 鍖哄埌鍙︿竴涓?/span> MSC 鍖哄悗錛屼粛鑳藉叆緗戜嬌鐢ㄧ殑閫氫俊鏈嶅姟鍔熻兘縐頒負婕父銆?/span>