ºìÁªLinuxÃÅ»§
Linux°ïÖú

JAVA½Ì³Ì£º½âÎöJavaµÄ¶àÏ̻߳úÖÆ

·¢²¼Ê±¼ä:2006-09-23 00:07:31À´Ô´:ºìÁª×÷Õß:Space
¡¡¡¡Ò»¡¢½ø³ÌÓëÓ¦ÓóÌÐòµÄÇø±ð
¡¡¡¡
¡¡¡¡½ø³Ì£¨Process£©ÊÇ×î³õ¶¨ÒåÔÚUnixµÈ¶àÓû§¡¢¶àÈÎÎñ²Ù×÷ϵͳ»·¾³ÏÂÓÃÓÚ±íʾӦÓóÌÐòÔÚÄÚ´æ»·¾³Öлù±¾Ö´Ðе¥ÔªµÄ¸ÅÄî¡£ÒÔUnix²Ù×÷ϵͳΪÀý£¬½ø³ÌÊÇUnix²Ù×÷ϵͳ»·¾³ÖеĻù±¾³É·Ö¡¢ÊÇϵͳ×ÊÔ´·ÖÅäµÄ»ù±¾µ¥Î»¡£Unix²Ù×÷ϵͳÖÐÍê³ÉµÄ¼¸ºõËùÓÐÓû§¹ÜÀíºÍ×ÊÔ´·ÖÅäµÈ¹¤×÷¶¼ÊÇͨ¹ý²Ù×÷ϵͳ¶ÔÓ¦ÓóÌÐò½ø³ÌµÄ¿ØÖÆÀ´ÊµÏֵġ£
¡¡¡¡
¡¡¡¡C¡¢C++¡¢JavaµÈÓïÑÔ±àдµÄÔ´³ÌÐò¾­ÏàÓ¦µÄ±àÒëÆ÷±àÒë³É¿ÉÖ´ÐÐÎļþºó£¬Ìá½»¸ø¼ÆËã»ú´¦ÀíÆ÷ÔËÐС£Õâʱ£¬´¦ÔÚ¿ÉÖ´ÐÐ״̬ÖеÄÓ¦ÓóÌÐò³ÆΪ½ø³Ì¡£´ÓÓû§½Ç¶ÈÀ´¿´£¬½ø³ÌÊÇÓ¦ÓóÌÐòµÄÒ»¸öÖ´Ðйý³Ì¡£´Ó²Ù×÷ϵͳºËÐĽǶÈÀ´¿´£¬½ø³Ì´ú±íµÄÊDzÙ×÷ϵͳ·ÖÅäµÄÄÚ´æ¡¢CPUʱ¼äƬµÈ×ÊÔ´µÄ»ù±¾µ¥Î»£¬ÊÇΪÕýÔÚÔËÐеijÌÐòÌṩµÄÔËÐл·¾³¡£½ø³ÌÓëÓ¦ÓóÌÐòµÄÇø±ðÔÚÓÚÓ¦ÓóÌÐò×÷Ϊһ¸ö¾²Ì¬Îļþ´æ´¢ÔÚ¼ÆËã»úϵͳµÄÓ²Å̵ȴ洢¿Õ¼äÖУ¬¶ø½ø³ÌÔòÊÇ´¦ÓÚ¶¯Ì¬Ìõ¼þÏÂÓɲÙ×÷ϵͳά»¤µÄϵͳ×ÊÔ´¹ÜÀíʵÌå¡£¶àÈÎÎñ»·¾³ÏÂÓ¦ÓóÌÐò½ø³ÌµÄÖ÷ÒªÌصã°üÀ¨£º ¡¡
¡¡
¡¡¡¡¡ñ½ø³ÌÔÚÖ´Ðйý³ÌÖÐÓÐÄÚ´æµ¥ÔªµÄ³õʼÈë¿Úµã£¬²¢ÇÒ½ø³Ì´æ»î¹ý³ÌÖÐʼÖÕÓµÓжÀÁ¢µÄÄÚ´æµØÖ·¿Õ¼ä£» ¡¡¡¡
¡¡¡¡¡ñ½ø³ÌµÄÉú´æÆÚ״̬°üÀ¨´´½¨¡¢¾ÍÐ÷¡¢ÔËÐС¢×èÈûºÍËÀÍöµÈÀàÐÍ£» ¡¡¡¡
¡¡¡¡¡ñ´ÓÓ¦ÓóÌÐò½ø³ÌÔÚÖ´Ðйý³ÌÖÐÏòCPU·¢³öµÄÔËÐÐÖ¸ÁîÐÎʽ²»Í¬£¬¿ÉÒÔ½«½ø³ÌµÄ״̬·ÖΪÓû§Ì¬ºÍºËÐÄ̬¡£´¦ÓÚÓû§Ì¬ÏµĽø³ÌÖ´ÐеÄÊÇÓ¦ÓóÌÐòÖ¸Áî¡¢´¦ÓÚºËÐÄ̬ϵÄÓ¦ÓóÌÐò½ø³ÌÖ´ÐеÄÊDzÙ×÷ϵͳָÁî¡£
¡¡¡¡
¡¡¡¡ÔÚUnix²Ù×÷ϵͳÆô¶¯¹ý³ÌÖУ¬ÏµÍ³×Ô¶¯´´½¨swapper¡¢initµÈϵͳ½ø³Ì£¬ÓÃÓÚ¹ÜÀíÄÚ´æ×ÊÔ´ÒÔ¼°¶ÔÓû§½ø³Ì½øÐе÷¶ÈµÈ¡£ÔÚUnix»·¾³ÏÂÎÞÂÛÊÇÓɲÙ×÷ϵͳ´´½¨µÄ½ø³Ì»¹ÒªÓÉÓ¦ÓóÌÐòÖ´Ðд´½¨µÄ½ø³Ì£¬¾ùÓµÓÐΨһµÄ½ø³Ì±êʶ£¨PID£©¡£

¡¡¡¡¶þ¡¢½ø³ÌÓëJavaÏ̵߳ÄÇø±ð

¡¡¡¡Ó¦ÓóÌÐòÔÚÖ´Ðйý³ÌÖдæÔÚÒ»¸öÄÚ´æ¿Õ¼äµÄ³õʼÈë¿ÚµãµØÖ·¡¢Ò»¸ö³ÌÐòÖ´Ðйý³ÌÖеĴúÂëÖ´ÐÐÐòÁÐÒÔ¼°ÓÃÓÚ±êʶ½ø³Ì½áÊøµÄÄÚ´æ³ö¿ÚµãµØÖ·£¬ÔÚ½ø³ÌÖ´Ðйý³ÌÖеÄÿһʱ¼äµã¾ùÓÐΨһµÄ´¦ÀíÆ÷Ö¸ÁîÓëÄÚ´æµ¥ÔªµØÖ·Ïà¶ÔÓ¦¡£ ¡¡
¡¡
¡¡¡¡JavaÓïÑÔÖж¨ÒåµÄỊ̈߳¨Thread£©Í¬Ñù°üÀ¨Ò»¸öÄÚ´æÈë¿ÚµãµØÖ·¡¢Ò»¸ö³ö¿ÚµãµØÖ·ÒÔ¼°Äܹ»Ë³ÐòÖ´ÐеĴúÂëÐòÁС£µ«Êǽø³ÌÓëÏ̵߳ÄÖØÒªÇø±ðÔÚÓÚÏ̲߳»Äܹ»µ¥¶ÀÖ´ÐУ¬Ëü±ØÐëÔËÐÐÔÚ´¦Óڻ״̬µÄÓ¦ÓóÌÐò½ø³ÌÖУ¬Òò´Ë¿ÉÒÔ¶¨ÒåÏß³ÌÊdzÌÐòÄÚ²¿µÄ¾ßÓв¢·¢ÐÔµÄ˳Ðò´úÂëÁ÷¡£ ¡¡
¡¡
¡¡¡¡Unix²Ù×÷ϵͳºÍMicrosoft Windows²Ù×÷ϵͳ֧³Ö¶àÓû§¡¢¶à½ø³ÌµÄ²¢·¢Ö´ÐУ¬¶øJavaÓïÑÔÖ§³ÖÓ¦ÓóÌÐò½ø³ÌÄÚ²¿µÄ¶à¸öÖ´ÐÐÏ̵߳IJ¢·¢Ö´ÐС£¶àÏ̵߳ÄÒâÒåÔÚÓÚÒ»¸öÓ¦ÓóÌÐòµÄ¶à¸öÂß¼­µ¥Ôª¿ÉÒÔ²¢·¢µØÖ´ÐС£µ«ÊǶàÏ̲߳¢²»Òâζ×Ŷà¸öÓû§½ø³ÌÔÚÖ´ÐУ¬²Ù×÷ϵͳҲ²»°Ñÿ¸öÏß³Ì×÷Ϊ¶ÀÁ¢µÄ½ø³ÌÀ´·ÖÅä¶ÀÁ¢µÄϵͳ×ÊÔ´¡£½ø³Ì¿ÉÒÔ´´½¨Æä×Ó½ø³Ì£¬×Ó½ø³ÌÓ븸½ø³ÌÓµÓв»Í¬µÄ¿ÉÖ´ÐдúÂëºÍÊý¾ÝÄÚ´æ¿Õ¼ä¡£¶øÔÚÓÃÓÚ´ú±íÓ¦ÓóÌÐòµÄ½ø³ÌÖжà¸öÏ̹߳²ÏíÊý¾ÝÄÚ´æ¿Õ¼ä£¬µ«±£³Öÿ¸öÏß³ÌÓµÓжÀÁ¢µÄÖ´ÐжÑÕ»ºÍ³ÌÐòÖ´ÐÐÉÏÏÂÎÄ£¨Context£©¡£
¡¡¡¡
¡¡¡¡»ùÓÚÉÏÊöÇø±ð£¬Ïß³ÌÒ²¿ÉÒÔ³ÆΪÇáÐͽø³Ì (Light Weight Process£¬LWP)¡£²»Í¬Ï̼߳äÔÊÐíÈÎÎñЭ×÷ºÍÊý¾Ý½»»»£¬Ê¹µÃÔÚ¼ÆËã»úϵͳ×ÊÔ´ÏûºÄµÈ·½Ãæ·Ç³£Á®¼Û¡£
¡¡¡¡
¡¡¡¡Ïß³ÌÐèÒª²Ù×÷ϵͳµÄÖ§³Ö£¬²»ÊÇËùÓÐÀàÐ͵ļÆËã»ú¶¼Ö§³Ö¶àÏß³ÌÓ¦ÓóÌÐò¡£Java³ÌÐòÉè¼ÆÓïÑÔ½«Ïß³ÌÖ§³ÖÓëÓïÑÔÔËÐл·¾³½áºÏÔÚÒ»Æð£¬ÌṩÁ˶àÈÎÎñ²¢·¢Ö´ÐеÄÄÜÁ¦¡£Õâ¾ÍºÃ±ÈÒ»¸öÈËÔÚ´¦Àí¼ÒÎñµÄ¹ý³ÌÖУ¬½«Ò·þ·Åµ½Ï´Ò»úÖÐ×Ô¶¯Ï´µÓºó½«´óÃ×·ÅÔڵ緹¹øÀȻºó¿ªÊ¼×ö²Ë¡£µÈ²Ë×öºÃÁË£¬·¹ÊìÁËͬʱÒ·þҲϴºÃÁË¡£
¡¡¡¡
¡¡¡¡ÐèҪעÒâµÄÊÇ£ºÔÚÓ¦ÓóÌÐòÖÐʹÓöàÏ̲߳»»áÔö¼Ó CPU µÄÊý¾Ý´¦ÀíÄÜÁ¦¡£Ö»ÓÐÔÚ¶àCPU µÄ¼ÆËã»ú»òÕßÔÚÍøÂç¼ÆËãÌåϵ½á¹¹Ï£¬½«Java³ÌÐò»®·ÖΪ¶à¸ö²¢·¢Ö´ÐÐÏ̺߳ó£¬Í¬Ê±Æô¶¯¶à¸öÏß³ÌÔËÐУ¬Ê¹²»Í¬µÄÏß³ÌÔËÐÐÔÚ»ùÓÚ²»Í¬´¦ÀíÆ÷µÄJavaÐéÄâ»úÖУ¬²ÅÄÜÌá¸ßÓ¦ÓóÌÐòµÄÖ´ÐÐЧÂÊ¡£

ÁíÍ⣬Èç¹ûÓ¦ÓóÌÐò±ØÐëµÈ´ýÍøÂçÁ¬½Ó»òÊý¾Ý¿âÁ¬½ÓµÈÊý¾ÝÍÌÍÂËÙ¶ÈÏà¶Ô½ÏÂýµÄ×ÊԴʱ£¬¶àÏß³ÌÓ¦ÓóÌÐòÊǷdz£ÓÐÀûµÄ¡£»ùÓÚInternetµÄÓ¦ÓóÌÐòÓбØÒªÊǶàÏß³ÌÀàÐ͵ģ¬ÀýÈ磬µ±¿ª·¢ÒªÖ§³Ö´óÁ¿¿Í»§»úµÄ·þÎñÆ÷¶ËÓ¦ÓóÌÐòʱ£¬¿ÉÒÔ½«Ó¦ÓóÌÐò´´½¨³É¶àÏß³ÌÐÎʽÀ´ÏìÓ¦¿Í»§¶ËµÄÁ¬½ÓÇëÇó£¬Ê¹Ã¿¸öÁ¬½ÓÓû§¶ÀÕ¼Ò»¸ö¿Í»§¶ËÁ¬½ÓÏ̡߳£ÕâÑù£¬Óû§¸Ð¾õ·þÎñÆ÷ֻΪÁ¬½ÓÓû§×Ô¼º·þÎñ£¬´Ó¶øËõ¶ÌÁË·þÎñÆ÷µÄ¿Í»§¶ËÏìӦʱ¼ä¡£
¡¡¡¡
¡¡¡¡Èý¡¢JavaÓïÑԵĶàÏ̳߳ÌÐòÉè¼Æ·½·¨
¡¡¡¡
¡¡¡¡ÀûÓÃJavaÓïÑÔʵÏÖ¶àÏß³ÌÓ¦ÓóÌÐòµÄ·½·¨ºÜ¼òµ¥¡£¸ù¾Ý¶àÏß³ÌÓ¦ÓóÌÐò¼Ì³Ð»òʵÏÖ¶ÔÏóµÄ²»Í¬¿ÉÒÔ²ÉÓÃÁ½ÖÖ·½Ê½£ºÒ»ÖÖÊÇÓ¦ÓóÌÐòµÄ²¢·¢ÔËÐжÔÏóÖ±½Ó¼Ì³ÐJavaµÄÏß³ÌÀàThread£»ÁíÍâÒ»ÖÖ·½Ê½ÊǶ¨Òå²¢·¢Ö´ÐжÔÏóʵÏÖRunnable½Ó¿Ú¡£
¡¡¡¡
¡¡¡¡¼Ì³ÐThreadÀàµÄ¶àÏ̳߳ÌÐòÉè¼Æ·½·¨
¡¡¡¡
¡¡¡¡Thread ÀàÊÇJDKÖж¨ÒåµÄÓÃÓÚ¿ØÖÆÏ̶߳ÔÏóµÄÀ࣬ÔÚ¸ÃÀàÖзâ×°ÁËÓÃÓÚ½øÐÐÏ߳̿ØÖƵķ½·¨¡£¼ûÏÂÃæµÄʾÀý´úÂë:
¡¡¡¡[code]//Consumer.java
¡¡¡¡import java.util.*;
¡¡¡¡class Consumer extends Thread
¡¡¡¡{
¡¡¡¡ int nTime;
¡¡¡¡ String strConsumer;
¡¡¡¡ public Consumer(int nTime, String strConsumer)
¡¡¡¡ {
¡¡¡¡ this.nTime = nTime;
¡¡¡¡ this.strConsumer = strConsumer;
¡¡¡¡ }
¡¡¡¡ public void run()
¡¡¡¡ {
¡¡¡¡while(true)
¡¡¡¡{
¡¡¡¡ try
¡¡¡¡{
¡¡¡¡ System.out.println("Consumer name:"+strConsumer+"\n");
¡¡¡¡ Thread.sleep(nTime);
¡¡¡¡ }
¡¡¡¡catch(Exception e)
¡¡¡¡{
¡¡¡¡ e.printStackTrace();
¡¡¡¡ }
¡¡¡¡}
¡¡¡¡ }
¡¡¡¡static public void main(String args[])
¡¡¡¡{
¡¡¡¡ Consumer aConsumer = new Consumer (1000, "aConsumer");
¡¡¡¡ aConsumer.start();
¡¡¡¡ Consumer bConsumer = new Consumer (2000, "bConsumer");
¡¡¡¡ bConsumer.start();
¡¡¡¡ Consumer cConsumer = new Consumer (3000, "cConsumer ");
¡¡¡¡ cConsumer.start();
¡¡¡¡}
¡¡¡¡} [/code]

¡¡¡¡´ÓÉÏÃæµÄ³ÌÐò´úÂë¿ÉÒÔ¿´³ö£º¶àÏß³ÌÖ´ÐеØÏÂConsumer¼Ì³ÐJavaÓïÑÔÖеÄÏß³ÌÀàThread²¢ÇÒÔÚmain·½·¨Öд´½¨ÁËÈý¸öConsumer¶ÔÏóµÄʵÀý¡£µ±µ÷ÓöÔÏóʵÀýµÄstart·½·¨Ê±£¬×Ô¶¯µ÷ÓÃConsumerÀàÖж¨ÒåµÄrun·½·¨Æô¶¯¶ÔÏóÏß³ÌÔËÐС£Ïß³ÌÔËÐеĽá¹ûÊÇÿ¼ä¸ônTimeʱ¼ä´òÓ¡³ö¶ÔÏóʵÀýÖеÄ×Ö·û´®³ÉÔ±±äÁ¿strConsumerµÄÄÚÈÝ¡£
¡¡¡¡
¡¡¡¡¿ÉÒÔ×ܽá³ö¼Ì³ÐThreadÀàµÄ¶àÏ̳߳ÌÐòÉè¼Æ·½·¨ÊÇʹӦÓóÌÐòÀà¼Ì³ÐThreadÀಢÇÒÔÚ¸ÃÀàµÄrun·½·¨ÖÐʵÏÖ²¢·¢ÐÔ´¦Àí¹ý³Ì¡£ ¡¡
¡¡
¡¡¡¡ÊµÏÖRunnable½Ó¿ÚµÄ¶àÏ̳߳ÌÐòÉè¼Æ·½·¨
¡¡¡¡
¡¡¡¡JavaÓïÑÔÖÐÌṩµÄÁíÍâÒ»ÖÖʵÏÖ¶àÏß³ÌÓ¦ÓóÌÐòµÄ·½·¨ÊǶàÏ̶߳ÔÏóʵÏÖRunnable½Ó¿Ú²¢ÇÒÔÚ¸ÃÀàÖж¨ÒåÓÃÓÚÆô¶¯Ï̵߳Ärun·½·¨¡£ÕâÖÖ¶¨Ò巽ʽµÄºÃ´¦ÔÚÓÚ¶àÏß³ÌÓ¦ÓöÔÏó¿ÉÒԼ̳ÐÆäËü¶ÔÏó¶ø²»ÊDZØÐë¼Ì³ÐThreadÀ࣬´Ó¶øÄܹ»Ôö¼ÓÀඨÒåµÄÂß¼­ÐÔ¡£
¡¡¡¡
¡¡¡¡ÊµÏÖRunnable½Ó¿ÚµÄ¶àÏß³ÌÓ¦ÓóÌÐò¿ò¼Ü´úÂëÈçÏÂËùʾ£º ¡¡¡¡
[code]¡¡¡¡//Consumer.java
¡¡¡¡import java.util.*;
¡¡¡¡class Consumer implements Runnable
¡¡¡¡{
¡¡¡¡ ¡­ ¡­
¡¡¡¡public Consumer(int nTime, String strConsumer){¡­ ¡­}
¡¡¡¡public void run(){¡­ ¡­}
¡¡¡¡static public void main(String args[])
¡¡¡¡{
¡¡¡¡Thread aConsumer = new Thread(new Consumer(1000, "aConsumer"));
¡¡¡¡aConsumer.start();
¡¡¡¡//ÆäËü¶ÔÏóʵÀýµÄÔËÐÐÏß³Ì
¡¡¡¡ //¡­ ¡­
¡¡¡¡ }
¡¡¡¡}[/code] ¡¡¡¡
¡¡¡¡´ÓÉÏÊö´úÂë¿ÉÒÔ¿´³ö£º¸ÃÀàʵÏÖÁËRunnable½Ó¿Ú²¢ÇÒÔÚ¸ÃÀàÖж¨ÒåÁËrun·½·¨¡£ÕâÖÖ¶àÏß³ÌÓ¦ÓóÌÐòµÄʵÏÖ·½Ê½Óë¼Ì³ÐThreadÀàµÄ¶àÏß³ÌÓ¦ÓóÌÐòµÄÖØÒªÇø±ðÔÚÓÚÆô¶¯¶àÏ̶߳ÔÏóµÄ·½·¨Éè¼Æ·½·¨²»Í¬¡£ÔÚÉÏÊö´úÂëÖУ¬Í¨¹ý´´½¨Thread¶ÔÏóʵÀý²¢ÇÒ½«Ó¦ÓöÔÏó×÷Ϊ´´½¨ThreadÀàʵÀýµÄ²ÎÊý¡£

¡¡¡¡ËÄ¡¢Ï̼߳äµÄͬ²½
¡¡¡¡
¡¡¡¡JavaÓ¦ÓóÌÐòµÄ¶à¸öÏ̹߳²Ïíͬһ½ø³ÌµÄÊý¾Ý×ÊÔ´£¬¶à¸öÓû§Ïß³ÌÔÚ²¢·¢ÔËÐйý³ÌÖпÉÄÜͬʱ·ÃÎʾßÓÐÃô¸ÐÐÔµÄÄÚÈÝ¡£ÔÚJavaÖж¨ÒåÁËÏß³Ìͬ²½µÄ¸ÅÄʵÏÖ¶Ô¹²Ïí×ÊÔ´µÄÒ»ÖÂÐÔά»¤¡£ÏÂÃæÒÔ±ÊÕß×î½ü¿ª·¢µÄÒƶ¯Í¨ÐżƷÑϵͳÖÐÏ̼߳äͬ²½¿ØÖÆ·½·¨£¬ËµÃ÷JavaÓïÑÔÖжàÏß³Ìͬ²½·½Ê½µÄʵÏÖ¹ý³Ì¡£
¡¡¡¡
¡¡¡¡ÔÚûÓжàÏß³Ìͬ²½¿ØÖƲßÂÔÌõ¼þϵĿͻ§ÕË»§ÀඨÒå¿ò¼Ü´úÂëÈçÏÂËùʾ£º ¡¡¡¡
[code]¡¡¡¡public class RegisterAccount
¡¡¡¡{
¡¡¡¡float fBalance;
¡¡¡¡//¿Í»§½É·Ñ·½·¨
¡¡¡¡public void deposit(float fFees){ fBalance += fFees; }
¡¡¡¡//ͨ»°¼Æ·Ñ·½·¨
¡¡¡¡public void withdraw(float fFees){ fBalance -= fFees; }
¡¡¡¡¡­ ¡­
¡¡¡¡}[/code]
¡¡¡¡¶ÁÕßÒ²Ðí»áÈÏΪ£ºÉÏÊö³ÌÐò´úÂëÍêÈ«Äܹ»Âú×ã¼Æ·Ñϵͳʵ¼ÊµÄÐèÒª¡£È·Êµ£¬ÔÚµ¥Ï̻߳·¾³Ï¸óÌÐòȷʵÊÇ¿É¿¿µÄ¡£µ«ÊÇ£¬¶à½ø³Ì²¢·¢ÔËÐеÄÇé¿öÊÇÔõÑùµÄÄØ£¿¼ÙÉè·¢ÉúÕâÖÖÇé¿ö£º¿Í»§ÔÚ¿Í»§·þÎñÖÐÐĽøÐнɷѵÄͬʱÕýÔÚÀûÓÃÒƶ¯Í¨ÐÅÉ豸½ö´Ëͨ»°£¬¿Í»§Í¨»°½áÊøʱ¼Æ·ÑϵͳÆô¶¯¼Æ·Ñ½ø³Ì£¬¶øͬʱ·þÎñÖÐÐĵŤ×÷ÈËÔ±Ò²Ìá½»½É·Ñ½ø³ÌÔËÐС£¶ÁÕß¿ÉÒÔ¿´µ½Èç¹û·¢ÉúÕâÖÖÇé¿ö£¬¶Ô¿Í»§ÕË»§µÄ´¦ÀíÊDz»ÑÏËàµÄ¡£
¡¡
¡¡¡¡ÈçºÎ½â¾öÕâÖÖÎÊÌâÄØ£¿ºÜ¼òµ¥£¬ÔÚRegisterAccountÀà·½·¨¶¨ÒåÖмÓÉÏÓÃÓÚ±êʶͬ²½·½·¨µÄ¹Ø¼ü×Ösynchronized¡£ÕâÑù£¬ÔÚͬ²½·½·¨Ö´Ðйý³ÌÖи÷½·¨Éæ¼°µÄ¹²Ïí×ÊÔ´£¨ÔÚÉÏÊö´úÂëÖÐΪfBalance³ÉÔ±±äÁ¿£©½«±»¼ÓÉϹ²ÏíËø£¬ÒÔÈ·±£ÔÚ·½·¨ÔËÐÐÆÚ¼äÖ»Óи÷½·¨Äܹ»¶Ô¹²Ïí×ÊÔ´½øÐзÃÎÊ£¬Ö±µ½¸Ã·½·¨µÄÏß³ÌÔËÐнáÊø´ò¿ª¹²ÏíËø£¬ÆäËüÏ̲߳ÅÄܹ»·ÃÎÊÕâЩ¹²Ïí×ÊÔ´¡£ÔÚ¹²ÏíËøûÓдò¿ªµÄʱºòÆäËü·ÃÎʹ²Ïí×ÊÔ´µÄÏ̴߳¦ÓÚ×èÈû״̬¡£
¡¡¡¡
¡¡¡¡½øÐÐÏß³Ìͬ²½²ßÂÔ¿ØÖƺóµÄRegisterAccountÀඨÒåÈçÏÂÃæ´úÂëËùʾ£º ¡¡¡¡
[code]¡¡¡¡public class RegisterAccount
¡¡¡¡{
¡¡¡¡float fBalance;
¡¡¡¡public synchronized void deposit(float fFees){ fBalance += fFees; }
¡¡¡¡public synchronized void withdraw(float fFees){ fBalance -= fFees; }
¡¡¡¡¡­ ¡­
¡¡¡¡}[/code]
¡¡¡¡´Ó¾­¹ýÏß³Ìͬ²½»úÖƶ¨ÒåºóµÄ´úÂëÐÎʽ¿ÉÒÔ¿´³ö£ºÔÚ¶Ô¹²Ïí×ÊÔ´½øÐзÃÎʵķ½·¨·ÃÎÊÊôÐԹؼü×Ö£¨public£©ºó¸½¼Óͬ²½¶¨Òå¹Ø¼ü×Ösynchronized£¬Ê¹µÃͬ²½·½·¨ÔÚ¶Ô¹²Ïí×ÊÔ´·ÃÎʵÄʱºò£¬ÎªÕâЩÃô¸Ð×ÊÔ´¸½¼Ó¹²ÏíËøÀ´¿ØÖÆ·½·¨Ö´ÐÐÆÚ¼äµÄ×ÊÔ´¶ÀÕ¼ÐÔ£¬ÊµÏÖÁËÓ¦ÓÃϵͳÊý¾Ý×ÊÔ´µÄÒ»ÖÂÐÔ¹ÜÀíºÍά»¤¡£

¡¡¡¡Îå¡¢ JavaÏ̵߳ĹÜÀí¡¡
¡¡ ¡¡¡¡
¡¡¡¡Ï̵߳Ä״̬¿ØÖÆ
¡¡¡¡
¡¡¡¡ÔÚÕâÀïÐèÒªÃ÷È·µÄÊÇ£ºÎÞÂÛ²ÉÓü̳ÐThreadÀ໹ÊÇʵÏÖRunnable½Ó¿ÚÀ´ÊµÏÖÓ¦ÓóÌÐòµÄ¶àÏß³ÌÄÜÁ¦£¬¶¼ÐèÒªÔÚ¸ÃÀàÖж¨ÒåÓÃÓÚÍê³Éʵ¼Ê¹¦ÄܵÄrun·½·¨£¬Õâ¸örun·½·¨³ÆΪÏß³ÌÌ壨Thread Body£©¡£°´ÕÕÏß³ÌÌåÔÚ¼ÆËã»úϵͳÄÚ´æÖеÄ״̬²»Í¬£¬¿ÉÒÔ½«Ï̷߳ÖΪ´´½¨¡¢¾ÍÐ÷¡¢ÔËÐС¢Ë¯Ãß¡¢¹ÒÆðºÍËÀÍöµÈÀàÐÍ¡£ÕâЩÏß³Ì״̬ÀàÐÍÏÂÏ̵߳ÄÌØÕ÷Ϊ£º ¡¡
¡¡
¡¡¡¡´´½¨×´Ì¬£ºµ±ÀûÓÃnew¹Ø¼ü×Ö´´½¨Ï̶߳ÔÏóʵÀýºó£¬Ëü½ö½ö×÷Ϊһ¸ö¶ÔÏóʵÀý´æÔÚ£¬JVMûÓÐΪÆä·ÖÅäCPUʱ¼äƬµÈÏß³ÌÔËÐÐ×ÊÔ´£» ¡¡
¡¡
¡¡¡¡¾ÍÐ÷״̬£ºÔÚ´¦ÓÚ´´½¨×´Ì¬µÄÏß³ÌÖе÷ÓÃstart·½·¨½«Ï̵߳Ä״̬ת»»Îª¾ÍÐ÷״̬¡£Õâʱ£¬Ïß³ÌÒѾ­µÃµ½³ýCPUʱ¼äÖ®ÍâµÄÆäËüϵͳ×ÊÔ´£¬Ö»µÈJVMµÄÏ̵߳÷¶ÈÆ÷°´ÕÕÏ̵߳ÄÓÅÏȼ¶¶Ô¸ÃÏ߳̽øÐе÷¶È£¬´Ó¶øʹ¸ÃÏß³ÌÓµÓÐÄܹ»»ñµÃCPUʱ¼äƬµÄ»ú»á¡£
¡¡¡¡
¡¡¡¡Ë¯Ãß״̬£ºÔÚÏß³ÌÔËÐйý³ÌÖпÉÒÔµ÷ÓÃsleep·½·¨²¢ÔÚ·½·¨²ÎÊýÖÐÖ¸¶¨Ï̵߳Ä˯Ãßʱ¼ä½«Ïß³Ì״̬ת»»ÎªË¯Ãß״̬¡£Õâʱ£¬¸ÃÏß³ÌÔÚ²»ÊÍ·ÅÕ¼ÓÃ×ÊÔ´µÄÇé¿öÏÂÍ£Ö¹ÔËÐÐÖ¸¶¨µÄ˯Ãßʱ¼ä¡£Ê±¼äµ½´ïºó£¬Ïß³ÌÖØÐÂÓÉJVMÏ̵߳÷¶ÈÆ÷½øÐе÷¶ÈºÍ¹ÜÀí¡£
¡¡¡¡
¡¡¡¡¹ÒÆð״̬£º¿ÉÒÔͨ¹ýµ÷ÓÃsuspend·½·¨½«Ï̵߳Ä״̬ת»»Îª¹ÒÆð״̬¡£Õâʱ£¬Ï߳̽«ÊÍ·ÅÕ¼ÓõÄËùÓÐ×ÊÔ´£¬ÓÉJVMµ÷¶ÈתÈëÁÙʱ´æ´¢¿Õ¼ä£¬Ö±ÖÁÓ¦ÓóÌÐòµ÷ÓÃresume·½·¨»Ö¸´Ïß³ÌÔËÐС£ ¡¡
¡¡
¡¡¡¡ËÀÍö״̬£ºµ±Ïß³ÌÌåÔËÐнáÊø»òÕßµ÷ÓÃÏ̶߳ÔÏóµÄstop·½·¨ºóÏ߳̽«ÖÕÖ¹ÔËÐУ¬ÓÉJVMÊÕ»ØÏß³ÌÕ¼ÓõÄ×ÊÔ´¡£ ¡¡

¡¡¡¡ÔÚJavaÏß³ÌÀàÖзֱð¶¨ÒåÁËÏàÓ¦µÄ·½·¨£¬ÓÃÓÚÔÚÓ¦ÓóÌÐòÖжÔÏß³Ì״̬½øÐпØÖƺ͹ÜÀí¡£
¡¡¡¡
¡¡¡¡Ï̵߳ĵ÷¶È
¡¡¡¡
¡¡¡¡Ï̵߳÷ÓõÄÒâÒåÔÚÓÚJVMÓ¦¶ÔÔËÐеĶà¸öÏ߳̽øÐÐϵͳ¼¶µÄЭµ÷£¬ÒÔ±ÜÃâ¶à¸öÏß³ÌÕùÓÃÓÐÏÞ×ÊÔ´¶øµ¼ÖÂÓ¦ÓÃϵͳËÀ»ú»òÕß±ÀÀ£¡£
¡¡¡¡
¡¡¡¡ÎªÁËÏ̶߳ÔÓÚ²Ù×÷ϵͳºÍÓû§µÄÖØÒªÐÔÇø·Ö¿ª£¬Java¶¨ÒåÁËÏ̵߳ÄÓÅÏȼ¶²ßÂÔ¡£Java½«Ï̵߳ÄÓÅÏȼ¶·ÖΪ10¸öµÈ¼¶£¬·Ö±ðÓÃ1-10Ö®¼äµÄÊý×Ö±íʾ¡£Êý×ÖÔ½´ó±íÃ÷Ï̵߳ļ¶±ðÔ½¸ß¡£ÏàÓ¦µØ£¬ÔÚThreadÀàÖж¨ÒåÁ˱íʾÏß³Ì×îµÍ¡¢×î¸ßºÍÆÕͨÓÅÏȼ¶µÄ³ÉÔ±±äÁ¿MIN_PRIORITY¡¢MAX_PRIORITYºÍNORMAL_PRIORITY£¬´ú±íµÄÓÅÏȼ¶µÈ¼¶·Ö±ðΪ1¡¢10ºÍ5¡£µ±Ò»¸öÏ̶߳ÔÏó±»´´½¨Ê±£¬ÆäĬÈϵÄÏß³ÌÓÅÏȼ¶ÊÇ5¡£
¡¡¡¡
¡¡¡¡ÎªÁË¿ØÖÆÏ̵߳ÄÔËÐвßÂÔ£¬Java¶¨ÒåÁËÏ̵߳÷¶ÈÆ÷À´¼à¿ØϵͳÖд¦ÓÚ¾ÍÐ÷״̬µÄËùÓÐÏ̡߳£Ï̵߳÷¶ÈÆ÷°´ÕÕÏ̵߳ÄÓÅÏȼ¶¾ö¶¨ÄǸöÏß³ÌͶÈë´¦ÀíÆ÷ÔËÐС£ÔÚ¶à¸öÏ̴߳¦ÓÚ¾ÍÐ÷״̬µÄÌõ¼þÏ£¬¾ßÓиßÓÅÏȼ¶µÄÏ̻߳áÔÚµÍÓÅÏȼ¶Ïß³Ì֮ǰµÃµ½Ö´ÐС£Ï̵߳÷¶ÈÆ÷ͬÑù²ÉÓÃ"ÇÀռʽ"²ßÂÔÀ´µ÷¶ÈÏß³ÌÖ´ÐУ¬¼´µ±Ç°Ïß³ÌÖ´Ðйý³ÌÖÐÓнϸßÓÅÏȼ¶µÄÏ߳̽øÈë¾ÍÐ÷״̬£¬Ôò¸ßÓÅÏȼ¶µÄÏß³ÌÁ¢¼´±»µ÷¶ÈÖ´ÐС£¾ßÓÐÏàͬÓÅÏȼ¶µÄËùÓÐÏ̲߳ÉÓÃÂÖתµÄ·½Ê½À´¹²Í¬·ÖÅäCPUʱ¼äƬ¡£
¡¡¡¡
¡¡¡¡ÔÚÓ¦ÓóÌÐòÖÐÉèÖÃÏß³ÌÓÅÏȼ¶µÄ·½·¨ºÜ¼òµ¥£¬ÔÚ´´½¨Ï̶߳ÔÏóÖ®ºó¿ÉÒÔµ÷ÓÃÏ̶߳ÔÏóµÄsetPriority·½·¨¸Ä±ä¸ÃÏ̵߳ÄÔËÐÐÓÅÏȼ¶£¬Í¬Ñù¿ÉÒÔµ÷ÓÃgetPriority·½·¨»ñÈ¡µ±Ç°Ï̵߳ÄÓÅÏȼ¶¡£
¡¡¡¡
¡¡¡¡ÔÚJavaÖбȽÏÌØÊâµÄÏß³ÌÊDZ»³ÆΪÊØ»¤£¨Daemon£©Ï̵߳ĵͼ¶±ðÏ̡߳£Õâ¸öÏ߳̾ßÓÐ×îµÍµÄÓÅÏȼ¶£¬ÓÃÓÚΪϵͳÖеÄÆäËü¶ÔÏóºÍÏß³ÌÌṩ·þÎñ¡£½«Ò»¸öÓû§Ïß³ÌÉèÖÃΪÊØ»¤Ï̵߳ķ½Ê½ÊÇÔÚÏ̶߳ÔÏó´´½¨Ö®Ç°µ÷ÓÃÏ̶߳ÔÏóµÄsetDaemon·½·¨¡£µäÐ͵ÄÊØ»¤Ïß³ÌÀý×ÓÊÇJVMÖеÄϵͳ×ÊÔ´×Ô¶¯»ØÊÕỊ̈߳¬ËüʼÖÕÔڵͼ¶±ðµÄ״̬ÖÐÔËÐУ¬ÓÃÓÚʵʱ¼à¿ØºÍ¹ÜÀíϵͳÖеĿɻØÊÕ×ÊÔ´¡£
¡¡¡¡
¡¡¡¡Ï̷߳Ö×é¹ÜÀí
¡¡¡¡
¡¡¡¡Java¶¨ÒåÁËÔÚ¶àÏß³ÌÔËÐÐϵͳÖеÄÏß³Ì×飨ThreadGroup£©¶ÔÏó£¬ÓÃÓÚʵÏÖ°´ÕÕÌض¨¹¦ÄܶÔÏ߳̽øÐм¯ÖÐʽ·Ö×é¹ÜÀí¡£Óû§´´½¨µÄÿ¸öÏ߳̾ùÊôÓÚijÏß³Ì×飬Õâ¸öÏß³Ì×é¿ÉÒÔÔÚÏ̴߳´½¨Ê±Ö¸¶¨£¬Ò²¿ÉÒÔ²»Ö¸¶¨Ïß³Ì×éÒÔʹ¸ÃÏ̴߳¦ÓÚĬÈϵÄÏß³Ì×éÖ®ÖС£µ«ÊÇ£¬Ò»µ©Ï̼߳ÓÈëijÏß³Ì×飬¸ÃÏ߳̾ÍÒ»Ö±´æÔÚÓÚ¸ÃÏß³Ì×éÖÐÖ±ÖÁÏß³ÌËÀÍö£¬²»ÄÜÔÚÖÐ;¸Ä±äÏß³ÌËùÊôµÄÏß³Ì×é¡£
¡¡¡¡
¡¡¡¡µ±JavaµÄApplicationÓ¦ÓóÌÐòÔËÐÐʱ£¬JVM´´½¨Ãû³ÆΪmainµÄÏß³Ì×é¡£³ý·Çµ¥¶ÀÖ¸¶¨£¬ÔÚ¸ÃÓ¦ÓóÌÐòÖд´½¨µÄÏ߳̾ùÊôÓÚmainÏß³Ì×é¡£ÔÚmainÏß³Ì×éÖпÉÒÔ´´½¨ÆäËüÃû³ÆµÄÏß³Ì×é²¢½«ÆäËüÏ̼߳ÓÈëµ½¸ÃÏß³Ì×éÖУ¬ÒÀ´ËÀàÍÆ£¬¹¹³ÉÏ̺߳ÍÏß³Ì×éÖ®¼äµÄÊ÷Ð͹ÜÀíºÍ¼Ì³Ð¹Øϵ¡£
¡¡¡¡
¡¡¡¡ÓëÏß³ÌÀàËÆ£¬¿ÉÒÔÕë¶ÔÏß³Ì×é¶ÔÏó½øÐÐÏß³Ì×éµÄµ÷¶È¡¢×´Ì¬¹ÜÀíÒÔ¼°ÓÅÏȼ¶ÉèÖõȡ£ÔÚ¶ÔÏß³Ì×é½øÐйÜÀí¹ý³ÌÖУ¬¼ÓÈ뵽ijÏß³Ì×éÖеÄËùÓÐÏ߳̾ù±»¿´×÷ͳһµÄ¶ÔÏó¡£

¡¡¡¡Áù¡¢Ð¡½á£º

¡¡¡¡±¾ÎÄÕë¶ÔJavaƽ̨ÖÐÏ̵߳ÄÐÔÖʺÍÓ¦ÓóÌÐòµÄ¶àÏ̲߳ßÂÔ½øÐÐÁË·ÖÎöºÍ½²½â¡£ ¡¡
¡¡
¡¡¡¡ÓëÆäËü²Ù×÷ϵͳ»·¾³²»Í¬£¬JavaÔËÐл·¾³ÖеÄÏß³ÌÀàËÆÓÚ¶àÓû§¡¢¶àÈÎÎñ²Ù×÷ϵͳ»·¾³ÏµĽø³Ì£¬µ«ÔÚ½ø³ÌºÍÏ̵߳ÄÔËÐм°´´½¨·½Ê½µÈ·½Ã棬½ø³ÌÓëJavaÏ߳̾ßÓÐÃ÷ÏÔÇø±ð¡£¡¡

¡¡¡¡Unix²Ù×÷ϵͳ»·¾³Ï£¬Ó¦ÓóÌÐò¿ÉÒÔÀûÓÃforkº¯Êý´´½¨×Ó½ø³Ì£¬µ«×Ó½ø³ÌÓë¸ÃÓ¦ÓóÌÐò½ø³ÌÓµÓжÀÁ¢µÄµØÖ·¿Õ¼ä¡¢ÏµÍ³×ÊÔ´ºÍ´úÂëÖ´Ðе¥Ôª£¬²¢ÇÒ½ø³ÌµÄµ÷¶ÈÊÇÓɲÙ×÷ϵͳÀ´Íê³ÉµÄ£¬Ê¹µÃÔÚÓ¦Óýø³ÌÖ®¼ä½øÐÐͨÐźÍÏß³ÌЭµ÷Ïà¶Ô¸´ÔÓ¡£¶øJavaÓ¦ÓóÌÐòÖеĶàÏß³ÌÔòÊǹ²ÏíͬһӦÓÃϵͳ×ÊÔ´µÄ¶à¸ö²¢ÐдúÂëÖ´ÐÐÌ壬Ïß³ÌÖ®¼äµÄͨÐźÍЭµ÷·½·¨Ïà¶Ô¼òµ¥¡£
¡¡¡¡
¡¡¡¡¿ÉÒÔ˵£ºJavaÓïÑÔ¶ÔÓ¦ÓóÌÐò¶àÏß³ÌÄÜÁ¦µÄÖ§³ÖÔöÇ¿ÁËJava×÷ΪÍøÂç³ÌÐòÉè¼ÆÓïÑÔµÄÓÅÊÆ£¬ÎªÊµÏÖ·Ö²¼Ê½Ó¦ÓÃϵͳÖжà¿Í»§¶ËµÄ²¢·¢·ÃÎÊÒÔ¼°Ìá¸ß·þÎñÆ÷µÄÏìӦЧÂʵ춨¼áʵ»ù´¡¡£
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 0 ÌõÆÀÂÛ