java多线程和android平台下的多线程

Ò»¡¢¶àÏ̵߳ĸÅÄî

¶àÏ̼߳´Êǽø³ÌµÄ¶à¸öÖ´Ðз¾¶£¬µ«²¢²»ÄÜÀí½âΪÕ⼸¸ö·¾¶ÊÇͬʱִÐеġ£ÔÚµ¥cpuÏÂÓ¦¸ÃÊǸù¾ÝÓÅÏȼ¶µ÷¶È·¨ÔòÂÖÁ÷¸øÕâЩ¸öÏ̵߳ÄÖ´ÐÐʱ¼äƬ¡£

¶þ¡¢JavaÖеĶàÏß³Ì

1£©¡¢ÈçºÎ´´½¨Ò»¸öÏß³Ì

        Á½ÖÖ·½Ê½£¬ÊµÏÖRunnable½Ó¿ÚºÍ¼Ì³ÐThreadÀà¡£Ò»°ã½¨ÒéʹÓÃRunnable½Ó¿Ú¡£

2£©¡¢join¡¢yield¡¢sleep¹Ø¼ü×ֵĺ¬Òå

        Join¼´Êǽ«Ä³Ò»Ï̲߳åÈëµ½µ±Ç°Ïß³ÌÖÐÖ´ÐУ»yieldʹµÃÓ뵱ǰÕýÔÚÖ´ÐеÄÏß³ÌÓÐÏàͬÓÅÏȼ¶µÄÆäËüÏß³ÌÓÐÖ´ÐеĻú»á£»sleepʹµ±Ç°Ïß³ÌÐÝÃßÒ»¶Îʱ¼ä£¬¿ÉʹµÃÓÅÏȼ¶µÍµÄÏß³ÌÓÐÖ´ÐеĻú»á¡£

3£©¡¢Ï̵߳ÄÓÅÏȼ¶

        JavaÖпÉÒÔÉ趨Ï̵߳ÄÓÅÏȼ¶£¬ÆäÏ̵߳÷¶È²ßÂÔÊÇ»ùÓÚÓÅÏȼ¶µÄÇÀռʽµ÷¶È·¨Ôò£¬¼´ÓÅÏȼ¶¸ßµÄÏ߳̿ÉÒÔÇÀÕ¼ÓÅÏȼ¶µÍµÄÏ̵߳ÄcpuÖ´ÐжΣ¬µ±ÓÅÏȼ¶¸ßµÄÏß³ÌÖ´ÐÐÍê±Ïºó£¬ÓÅÏȼ¶µÍµÄÏ̲߳ÅÓÐÖ´ÐеĻú»á¡£

4£©¡¢ËÀËø

        ËÀËøµÄ²úÉúµÄ»ù±¾Ô­ÒòÊÇ£ºÏß³Ì1Äõ½ÁËA×ÊÔ´µÄËø²¢µÈ´ýB×ÊÔ´µÄËø£¬Ïß³Ì2Äõ½ÁËB×ÊÔ´µÄËø²¢µÈ´ýA×ÊÔ´µÄËø£¬ÓÉÓÚÁ½¸öÏ̻߳¥²»ÊͷŸ÷×ÔµÄ×ÊÔ´£¬µ¼ÖÂÁ½¸öÏ߳̾ù²»ÄÜÖ´ÐÐÏÂÈ¥¡£

        JavaÖв¢Ã»ÓÐËÀËøµÄרÃżì²â¡¢±ÜÃâ»úÖÆ£¬ÐèÒªÔÚ³ÌÐòÖÐʵÏÖ¡£Í¨³£µÄ×ö·¨ÊÇ£º1¡¢ÔÚÈ«¾ÖÖж¨Òå»ñµÃËøµÄ˳Ðò£¬Ḭ̈߳´ÕÕ˳Ðò»ñµÃ×ÊÔ´Ëø£¬·´ÏòÊÍ·Å×ÊÔ´Ëø¡£2¡¢Ïß³ÌҪôһ´ÎÐÔ»ñµÃËùÓеÄËø£¬ÒªÃ´²»»ñµÃÈκÎËø¡£

Èý¡¢Ïß³Ìͬ²½£¨Éú²úÕߺÍÏû·ÑÕßÎÊÌ⣩

¶àÏ̻߳·¾³Ï£¬Ò»¸ö×ÊÔ´¿ÉÄÜÓжà¸öÏß³ÌÔÚʹÓ㬲úÉúÁËÏß³Ìͬ²½µÄÎÊÌâ¡£JavaÖÐÓÃsynchronized¹Ø¼ü×Ö¶Ô¶ÔÏó»òÕß·½·¨½øÐÐͬ²½¡£¸Ã¹Ø¼ü×ֵĺ¬ÒåÊǶԶÔÏó»òÕß·½·¨½øÐмÓËøÒÔ±£Ö¤ÔÚͬһʱ¼ä¶ÎÖ»ÓÐÒ»¸öÏß³ÌʹÓá£WaitÊǵ±Ä³¸öÏß³ÌÐèÒª»ñµÃ¶ÔÏó×ÊԴʱ¶øÆäËüÏß³ÌÕýÔÚʹÓÃʱÔòµÈ´ý£¬´Ëʱ¸ÃÏ̻߳á½øÈë¸Ã¶ÔÏóµÄÏ̵߳ȴý³Ø¡£notify£¨notifyall£©¹Ø¼ü×ÖÊÇ»½ÐÑij¸ö¶ÔÏó×ÊÔ´Ï̵߳ȴý³ØµÄỊ̈߳¬±íÃ÷ÒÑÓÐÏß³ÌÊÍ·ÅÁ˸Ã×ÊÔ´¡£

Ò»¸ö¾­µäµÄÎÊÌâÊÇÉú²úÕߺÍÏû·ÑÕßµÄÎÊÌ⣬ÔÚ¸½Â¼ÖÐÓвâÊÔdemo

ËÄ¡¢Ï̳߳صĸÅÄîºÍÓ÷¨

ÔÚJDK1.5ÒÔºó£¬javaµÄAPIÖÐÓÐÁËÏ̳߳أ¬ºÃÏñÓжàÖÖÀàÐ͵ÄÏ̳߳أ¬Ä¿Ç°Ö»ÓùýThreadPoolExecutor£¨int corePoolSize,int maximumPoolSize, long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,RejectedExecutionHandler handler£©£¬ÆäÖÐcorePoolSizeΪºËÐÄÏß³ÌÊý£¨¼´Ï̳߳ØÖеij¤¹¤£©¡¢maximumPoolSizeΪ×î´óÏß³ÌÊý£¨³¤¹¤+¶Ì¹¤£©£¬keepAliveTimeΪ¶Ì¹¤ÎÞÈÎÎñʱµÄ´æ»îʱ¼ä£¬unitΪʱ¼äµ¥Î»£¬workQueueΪÈÎÎñ¶ÓÁУ¬HandlerΪ¾Ü¾øÈÎÎñµÄ´¦ÀíÆ÷¡£¹ØÓÚÏêϸµÄÏ̳߳صĽ²½â²»ÔÚÕâÀïÒ»Ò»Õ¹¿ª¡£

Îå¡¢AndroidϵĶàÏß³Ì

ÔÚandroidÖÐÿһ¸öAPPÓ¦ÓÃÊÇÔÚÒ»¸öµ¥¶ÀµÄdalvikÐéÄâ»úµ¥Ò»µÄlinux½ø³ÌÖУ¬Ã¿Ò»¸öÓ¦ÓÃÓÐÒ»¸öÖ÷Ị̈߳¨main thread£©Õâ¸öÖ÷Ï̸߳ºÔð·Ö·¢°´¼üµÄÏìÓ¦µÈÓëÓû§½»»¥µÄʼþÏìÓ¦£¬ÔÚÕâ¸öÖ÷Ïß³ÌÄÚ²»ÄÜÓÐÌ«³¤Ê±¼äµÄ×èÈû£¬Ïß³Ì×èÈû³¬¹ý5Ãëºó¾Í»á±¨³ÌÐòÎÞÏìÓ¦µÄ´íÎó¡£Òò´ËһЩ¸´Ôӵġ¢ºÄʱµÄ²Ù×÷±ØÐ뿪ÆôеÄÏß³ÌÈ¥²Ù×÷£¬µ«ÊÇÔÚandroidµÄ¿ò¼ÜÖÐUIÔªËØÊDZØÐëÔÚÖ÷Ï̲߳ÅÄܸüеģ¬ËùÒÔÔÚºǫ́µÄ¸´ÔÓÂß¼­Íê³Éºó£¬Òª¸üÐÂÓëÓû§½»»¥µÄUIÔªËØÓÖ±ØÐë»Øµ½Ö÷Ïß³ÌÖС£ÔÚandroidÖÐÓÐÁ½¸öÖØÒªµÄ¹¤¾ß¿ÉÒÔÀûÓã¬HandlerºÍAsyncTask¡£

Handler¿ÉÒÔ´¦ÀíһЩÏûÏ¢ºÍ½«Ò»Ð©Runnable½è¿ÚÔËÐÐÔÚÆ䵱ǰµÄÏß³ÌÖС£Ä¿Ç°Ó¦ÓõÄ×î¶àµÄÊÇÖ÷Ï̴߳´½¨Ò»¸öHandlerʵÀý£¬²¢½«¸ÃʵÀý´«µÝ¸øºǫ́ÔËÐеÄỊ̈߳¬ºǫ́µÄÏß³ÌÍê³ÉÆ乤×÷ºó£¬Ê¹ÓøÃHandler·¢ËÍÒ»¸ömessage£¬ÕâʱÔÚÖ÷Ïß³ÌÖнÓÊܵ½¸ÃÏûÏ¢£¬È»ºó½øÐÐһЩUIµÄ¸üС£ÖÁÓÚ²ÎÊýµÄ´«µÝµÈϸ½ÚµÄÎÊÌ⣬¿ÉÒÔ²éÔÄMessageÀàµÄ˵Ã÷£¬ÔÚÕâÀï¾Í²»Ò»Ò»Õ¹¿ª¡£

AsyncTaskÒì²½ÈÎÎñÊÇandroidרÃÅÉè¼ÆÀ´½â¾öºǫ́Ïß³ÌÍê³Éºó¸üÐÂÖ÷Ïß³ÌÖеÄUIÔªËصÄÒ»¸öÀà¡£ÆäÈý¸ö·ºÐͲÎÊýΪParam¡¢Process¡¢Result¡£ParamΪ´«Èë²ÎÊý¡¢ProcessΪ½ø¶È¡¢ResultΪºǫ́ÈÎÎñÍê³Éºó´«µÝµ½Ö÷Ïß³ÌÖеIJÎÊý¡£¸ÃÀàÖÐÓÐËĸö¿ÉÒÔÖØÔصķ½·¨£º

1¡¢  onPreExecute£ºÔÚºǫ́Âß¼­Ö´ÐÐÇ°ÐèÒªµÄ×¼±¸¹¤×÷ÔÚÕâÀïÍê³É¡£UIÏ̡߳¾¼´Ö÷Ï̡߳¿ÔÚdoInBackgroundÇ°µ÷Óø÷½·¨¡£¡¾×¢Òâ¸Ã·½·¨ÊÇÖ´ÐÐÔÚUIÏß³ÌÖеġ¿

2¡¢  doInBackground£ººǫ́Ï̵߳÷Óø÷½·¨Íê³É¸´ÔÓºÄʱµÄÂß¼­£¬¿ÉÒÔͨ¹ýpublishProgress·½·¨À´¸üÐÂʵʱµÄÈÎÎñ½ø¶Èµ½UI£¬publishProgressÐèÒª×Ô¼ºÊµÏÖ

3¡¢  onProgressUpdate£ºµ±publishProgress±»µ÷Óúó£¬UIÏ̵߳÷Óø÷½·¨¸üÐÂUI¡£

4¡¢  onPostExecute£ºµ±doInBackgroundÍê³Éºó£¬½«Result´«µÝµ½¸Ã·½·¨£¬UIÏ̵߳÷Óá£