java³ÌÐòÉè¼ÆÊÔÌâ¿â ÏÂÔر¾ÎÄ

¡¶JavaÓïÑÔ³ÌÐòÉè¼Æ»ù´¡½Ì³Ì¡·

45

D¡¢ÊµÏÖjava.lang.Runnable½Ó¿Ú£¬ÊµÏÖrun·½·¨¡£ E¡¢ÊµÏÖjava.lang.ThreadÀ࣬ʵÏÖstart·½·¨¡£ ½â´ð£ºA£¬D

3¡¢ Ïß³ÌÔÚËüµÄÒ»¸öÍêÕûµÄÉúÃüÖÜÆÚÖÐÓÐÄÄ4ÖÖ״̬£¿ ½â´ð1£º

Ïß³ÌÔÚËüµÄÒ»¸öÍêÕûµÄÉúÃüÖÜÆÚÖÐͨ³£Òª¾­ÀúÈçϵÄ4ÖÖ״̬£º1. ´´½¨×´Ì¬(new Thread) 2. ¿ÉÔËÐÐ״̬( Runnable ) 3. ²»¿ÉÔËÐÐ״̬£¨Not Runnable£©4. ËÀÍö״̬£¨Dead£©

½â´ð2£º

µÚÒ»ÊÇ´´½¨×´Ì¬¡£ÔÚÉú³ÉÏ̶߳ÔÏ󣬲¢Ã»Óе÷ÓøöÔÏóµÄstart·½·¨£¬ÕâÊÇÏ̴߳¦ÓÚ´´½¨×´Ì¬¡£

µÚ¶þÊǾÍÐ÷״̬¡£µ±µ÷ÓÃÁËÏ̶߳ÔÏóµÄstart·½·¨Ö®ºó£¬¸ÃÏ߳̾ͽøÈëÁ˾ÍÐ÷״̬£¬µ«ÊÇ´ËʱÏ̵߳÷¶È³ÌÐò»¹Ã»ÓаѸÃÏß³ÌÉèÖÃΪµ±Ç°Ị̈߳¬´Ëʱ´¦ÓÚ¾ÍÐ÷״̬¡£ÔÚÏß³ÌÔËÐÐÖ®ºó£¬´ÓµÈ´ý»òÕß˯ÃßÖлØÀ´Ö®ºó£¬Ò²»á´¦ÓÚ¾ÍÐ÷״̬¡£

µÚÈýÊÇÔËÐÐ״̬¡£Ï̵߳÷¶È³ÌÐò½«´¦ÓÚ¾ÍÐ÷״̬µÄÏß³ÌÉèÖÃΪµ±Ç°Ị̈߳¬´ËʱÏ߳̾ͽøÈëÁËÔËÐÐ״̬£¬¿ªÊ¼ÔËÐÐrunº¯Êýµ±ÖеĴúÂë¡£

µÚËÄÊÇ×èÈû״̬¡£Ïß³ÌÕýÔÚÔËÐеÄʱºò£¬±»ÔÝÍ££¬Í¨³£ÊÇΪÁ˵ȴýij¸öʱ¼äµÄ·¢Éú(±ÈÈç˵ijÏî×ÊÔ´¾ÍÐ÷)Ö®ºóÔÙ¼ÌÐøÔËÐС£sleep,suspend£¬waitµÈ·½·¨¶¼¿ÉÒÔµ¼ÖÂÏß³Ì×èÈû¡£

µÚÎåÊÇËÀÍö״̬¡£Èç¹ûÒ»¸öÏ̵߳Ärun·½·¨Ö´ÐнáÊø»òÕßµ÷ÓÃstop·½·¨ºó£¬¸ÃÏ߳̾ͻáËÀÍö¡£¶ÔÓÚÒѾ­ËÀÍöµÄỊ̈߳¬ÎÞ·¨ÔÙʹÓÃstart·½·¨ÁîÆä½øÈë¾ÍÐ÷¡£

4¡¢Ïß³ÌÔÚʲô״̬ʱ£¬µ÷ÓÃisAlive()·½·¨·µ»ØµÄÖµÊÇfalse¡£

5¡¢½¨Á¢Ïß³ÌÓÐÄÄÁ½ÖÖ·½·¨£¿

½â´ð£º¶àÏß³ÌÓÐÁ½ÖÖʵÏÖ·½·¨£¬·Ö±ðÊǼ̳ÐThreadÀàÓëʵÏÖRunnable½Ó¿Ú¡£

6¡¢ÔõÑùÉèÖÃÏ̵߳ÄÓÅÏȼ¶£¿

7¡¢µ÷ÓÃThreadÀàµÄʲô·½·¨¿ÉÒÔÆô¶¯Ò»¸öỊ̈߳¿Ö±½Óµ÷ÓÃThreadÀàµÄrun()·½·¨¿ÉÒÔÆô¶¯Ò»¸öÏß³ÌÂð£¿

½â´ð£ºÏ̵߳÷ÓÃstart()·½·¨½«Æô¶¯Ị̈߳¬´Óн¨×´Ì¬½øÈë¾ÍÐ÷¶ÓÁÐÅŶӡ£²»ÄÜÖ±½Óµ÷ÓÃThreadÀàµÄrun()·½·¨¿ÉÒÔÆô¶¯Ò»¸öỊ̈߳¬ÎÒÃǵ÷ÓÃÁËThreadµÄrun()·½·¨£¬ËüµÄÐÐΪ¾Í»áºÍÆÕͨµÄ·½·¨µ÷ÓÃÒ»Ñù¡£

8¡¢Thread ÀàÖеÄstart() ºÍ run() ·½·¨ÓÐʲôÇø±ð£¿

½â´ð£ºÕâ¸öÎÊÌâ¾­³£±»Îʵ½£¬µ«»¹ÊÇÄÜ´Ó´ËÇø·Ö³öÃæÊÔÕ߶ÔJavaÏß³ÌÄ£Ð͵ÄÀí½â³Ì¶È¡£start()·½·¨±»ÓÃÀ´Æô¶¯Ð´´½¨µÄỊ̈߳¬¶øÇÒstart()ÄÚ²¿µ÷ÓÃÁËrun()·½·¨£¬ÕâºÍÖ±½Óµ÷ÓÃrun()

45

46

¡¶JavaÓïÑÔ³ÌÐòÉè¼Æ»ù´¡½Ì³Ì¡·

·½·¨µÄЧ¹û²»Ò»Ñù¡£µ±Äãµ÷ÓÃrun()·½·¨µÄʱºò£¬Ö»»áÊÇÔÚÔ­À´µÄÏß³ÌÖе÷Óã¬Ã»ÓÐеÄÏß³ÌÆô¶¯£¬start()·½·¨²Å»áÆô¶¯ÐÂÏ̡߳£

9¡¢½ø³ÌºÍÏ̵߳ÄÇø±ð£¿

½â´ð£º½ø³Ì=Ö´ÐÐÖеijÌÐò£¬Ã¿¸ö½ø³Ì¶¼ÓÐ×Ô¼º¶ÀÁ¢µÄÒ»¿éÄÚ´æ¡¢Ò»×éϵͳ×ÊÔ´¡£Ã¿Ò»¸ö½ø³ÌµÄÄÚ²¿Êý¾ÝºÍ״̬¶¼ÊÇÍêÈ«¶ÀÁ¢µÄ¡£

Ïß³Ì=½ø³ÌÖе¥¸ö˳ÐòµÄÁ÷¿ØÖÆ£¬Í¬ÀàµÄ¶à¸öÏ̹߳²ÏíÒ»¿éÄÚ´æ¡¢Ò»×éϵͳ×ÊÔ´¡£Ï̵߳ÄÔËÐпªÏúºÜС¡£

Ò»¸öÏß³ÌÊǽø³ÌµÄÒ»¸öÖ´ÐÐÁ÷³Ì£¬Ò»¸ö½ø³Ì¿ÉÒÔͬʱ°üº¬¶à¸öÏ̡߳£

10¡¢ÏÖÔÚÓÐT1¡¢T2¡¢T3Èý¸öỊ̈߳¬ÄãÔõÑù±£Ö¤T2ÔÚT1Ö´ÐÐÍêºóÖ´ÐУ¬T3ÔÚT2Ö´ÐÐÍêºóÖ´ÐУ¿

½â´ð£ºÔÚT2Ï̵߳Ärun()·½·¨ÖмÓÈë´úÂëT1.join£¬ÔÚT3Ï̵߳Ärun()·½·¨ÖмÓÈë´úÂëT2.join¡£

»òÕßÔÚÖ÷Ïß³Ìmain()·½·¨ÖУ¬ t1.start(); try {

t1.join();

} catch (InterruptedException e) {

// TODO Auto-generated catch block e.printStackTrace(); }

t2.start(); try {

t2.join();

} catch (InterruptedException e) {

// TODO Auto-generated catch block e.printStackTrace(); }

t3.start();

11¡¢Thread.start()ÓëThread.run()ÓÐʲôÇø±ð£¿

½â´ð£ºÍ¨¹ýµ÷ÓÃTheadÀàµÄstart()·½·¨À´Æô¶¯Ò»¸öÏß³Ì £¬Ê¹Ö®½øÈë¾ÍÐ÷״̬£¬µ±cpu·ÖÅäʱ¼ä¸ÃÏß³Ìʱ£¬ÓÉJVMµ÷¶ÈÖ´ÐÐrun()·½·¨¡£ Ö±½ÓʹÓÃrun()·½·¨½Ð×ö·½·¨µ÷Ó㬲»ÄÜÆô¶¯Ï̡߳£

12¡¢ÔÚÒ»¸ö¶ÔÏóÉÏÁ½¸öÏ߳̿ÉÒÔµ÷ÓÃÁ½¸ö²»Í¬µÄͬ²½ÊµÀý·½·¨Âð£¿

½â´ð£º²»ÄÜ£¬ÒòΪһ¸ö¶ÔÏóÒѾ­Í¬²½ÁËʵÀý·½·¨£¬Ï̻߳ñÈ¡Á˶ÔÏóµÄ¶ÔÏóËø¡£ËùÒÔÖ»ÓÐÖ´ÐÐÍê¸Ã·½·¨ÊͷŶÔÏóËøºó²ÅÄÜÖ´ÐÐÆä Ëüͬ²½·½·¨¡£

46

¡¶JavaÓïÑÔ³ÌÐòÉè¼Æ»ù´¡½Ì³Ì¡·

47

13¡¢µ±Ò»¸öͬ²½·½·¨ÒѾ­Ö´ÐУ¬Ïß³ÌÄܹ»µ÷ÓöÔÏóÉϵķÇͬ²½ÊµÀý·½·¨Âð£¿

½â´ð£º¿ÉÒÔ£¬Ò»¸ö·Çͬ²½·½·¨×ÜÊÇ¿ÉÒÔ±»µ÷Óöø²»»áÓÐÈκÎÎÊÌ⡣ʵ¼ÊÉÏ£¬JavaûÓÐΪ·Çͬ²½·½·¨×öÈκμì²é£¬Ëø¶ÔÏó½ö ½öÔÚͬ²½·½·¨»òÕßͬ²½´úÂë¿éÖмì²é¡£Èç¹ûÒ»¸ö·½·¨Ã»ÓÐÉùÃ÷Ϊͬ²½£¬¼´Ê¹ÄãÔÚʹÓù²ÏíÊý¾ÝJavaÕÕÑù»áµ÷Ó㬶ø²»»á×ö¼ì²éÊÇ·ñ°²È«£¬ËùÒÔÔÚÕâÖÖÇé¿öÏÂÒªÌØ ±ðСÐÄ¡£Ò»¸ö·½·¨ÊÇ·ñÉùÃ÷Ϊͬ²½È¡¾öÓÚÁÙ½çÇø·ÃÎÊ(critial section access),Èç¹û·½·¨²»·ÃÎÊÁÙ½çÇø(¹²Ïí×ÊÔ´»òÕßÊý¾Ý½á¹¹)¾Íû±ØÒªÉùÃ÷Ϊͬ²½µÄ¡£

14¡¢wait·½·¨µÄ×÷Óã¿

½â´ð£ºwait·½·¨ÓÃÔÚ synchronized ·½·¨»òÕß synchronized¿éÖС£Ò»°ãÔÚÅжÏÓï¾äÖУ¬Èç¹ûijÌõ¼þ±»´¥·¢£¬Èõ±Ç°Ïß³Ìwait²¢ÊͷŶÔÏóµÄËø¡£´Ëʱ¿ÉÒÔÈÃÆäËûÏ߳̿ÉÒÔ¶ÔÓÃÒÔ¶ÔÏóµ÷ÓÃsynchronized·½·¨¡£Ö±µ½µ÷Óà notify»òÕßnotifyAllºó waitµÄÏ̲߳ÅÓпÉÄÜÖ´ÐС£ËùÒÔÒ»°ãwait ºÍ notifyÊdzɶԳöÏֵġ£

15¡¢Æô¶¯Ò»¸öÏß³ÌÊÇÓÃrun()»¹ÊÇstart()£¬µ÷ÓõÄʱºòÓÐʲôÇø±ð£¿£¨Í¬µÚ8Ì⣩

½â´ð£ºµ±È»ÊÇstart()ÁË£¬µ±µ÷ÓÃÏ̵߳Ästart()·½·¨µÄʱºò£¬Ï߳̾ͻá½øÈëµ½¾ÍÐ÷״̬¡£run()·½·¨ÊÇÏ̵߳ÄÖ´ÐÐÈë¿Ú£¬µ±Ï̴߳ӾÍÐ÷״̬½øÈëµ½Ö´ÐÐ״̬ʱÊ×ÏÈÒª´Órun()·½·¨¿ªÊ¼Ö´ÐС£

µ±È»£¬ÎÒÃÇÒ²ÊÇ¿ÉÒÔÖ±½Óͨ¹ýÏ̶߳ÔÏóµ÷ÓøöÔÏóµÄrun()·½·¨µÄ£¬Ö»ÊÇÕâÖ»ÊÇÒ»´ÎÆÕͨµÄµ÷Ó㬲¢Ã»ÓÐÆô¶¯ÈκÎÒ»¸öÏ̡߳£

µ±ÎÒÃǵ÷ÓÃstart()·½·¨Ê±£¬ÊÇÁíÍâÆô¶¯ÁËÒ»¸öÏß³ÌÈ¥Ö´ÐÐÏß³ÌÀàµÄ´úÂ룬²¢²»Ó°ÏìÖ÷³ÌÐòµÄÖ´ÐУ¬µ«Êǵ÷ÓÃrun()·½·¨µÄʱºòÒªµÈ´ýrun()·½·¨ÄڵĴúÂëÖ´ÐÐÍêÖ÷³ÌÐò²Å¿ÉÒÔÏòÏÂÖ´ÐÐ

16¡¢ sleep() ºÍ wait() ÓÐʲôÇø±ð£¿

½â´ð£ºsleepÊÇÏß³ÌÀࣨThread£©µÄ·½·¨£¬µ¼Ö´ËÏß³ÌÔÝÍ£Ö´ÐÐÖ¸¶¨Ê±¼ä£¬¸øÖ´Ðлú»á¸øÆäËûỊ̈߳¬µ«ÊǼà¿Ø״̬ÒÀÈ»±£³Ö£¬µ½Ê±ºó»á×Ô¶¯»Ö¸´¡£µ÷ÓÃsleep²»»áÊͷŶÔÏóËø¡£waitÊÇObjectÀàµÄ·½·¨£¬¶Ô´Ë¶ÔÏóµ÷ÓÃwait·½·¨µ¼Ö±¾Ï̷߳ÅÆú¶ÔÏóËø£¬½øÈëµÈ´ý´Ë¶ÔÏóµÄµÈ´ýËø¶¨³Ø£¬Ö»ÓÐÕë¶Ô´Ë¶ÔÏó·¢³önotify·½·¨£¨»ònotifyAll£©ºó±¾Ï̲߳ŽøÈë¶ÔÏóËø¶¨³Ø×¼±¸»ñµÃ¶ÔÏóËø½øÈëÔËÐÐ״̬¡£

7.4×ÛºÏÌâ

14¡¢±àдһ¸öËÀËø³ÌÐò£¿

15¡¢ÔÚÏÂÃæµÄ´úÂëÇøÌîÈëÏàÓ¦µÄ´úÂ룬ʵÏÖÒÔϹ¦ÄÜ£º

ͨ¹ý¼Ì³ÐThreadÀàµÄ×ÓÀàThread1£¬À´´´½¨ºÍÆô¶¯Ò»¸öÏß³Ìt1£»

47

48

¡¶JavaÓïÑÔ³ÌÐòÉè¼Æ»ù´¡½Ì³Ì¡·

ͨ¹ýʵÏÖRunnable½Ó¿ÚµÄ¾ßÌåÀàRunner1£¬À´´´½¨ºÍÆô¶¯Ò»¸öÏß³Ìt2£» public class TestThread1{ public static void main(String[] args){

//´´½¨ºÍÆô¶¯Ò»¸öÏß³Ìt1£¬ÔÚÏÂÃæд³öÏàÓ¦´úÂë Thread1 t1 =new Thread1 () ; t1.start() ;

//´´½¨ºÍÆô¶¯Ò»¸öÏß³Ìt2£¬ÔÚÏÂÃæд³öÏàÓ¦´úÂë Runner1 r1 =new Runner1() ; Thread t2 =new Thread(r1) ; t2.start() ; for(int i=0;i<100;i++){ System.out.println(\ } } }

class Runner1 implements Runnable{ public void run(){ for(int i=0;i<100;i++){ System.out.println(\ } } }

class Thread1 extends Thread{ public void run(){ for(int i=0;i<100;i++){ System.out.println(\ } } }

16¡¢ÏÖÔÚÓÐT1 T2 T3Èý¸öỊ̈߳¬ÔõÑù±£Ö¤T2ÔÚT1Ö´ÐÐÍêÖ®ºóÖ´ÐÐ T3ÔÚT2Ö´ÐÐÍêÖ®ºóÖ´ÐС£ÇëÔÚÏàÓ¦ÇøÓòд³öʵÏָù¦ÄܵĴúÂë¡£

public class JoinDemo {

public static void main(String[] args) { T1 t1=new T1(\

48