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

´´½¨JavaÖеÄÏ̳߳Ø

·¢²¼Ê±¼ä:2006-05-03 19:13:10À´Ô´:ºìÁª×÷Õß:ÌìɽÀÏͯ
Ïß³ÌÊÇJavaµÄÒ»´óÌØÐÔ£¬Ëü¿ÉÒÔÊǸø¶¨µÄÖ¸ÁîÐòÁС¢¸ø¶¨µÄ·½·¨Öж¨ÒåµÄ±äÁ¿»òÕßһЩ¹²ÏíÊý¾Ý(ÀàÒ»¼¶µÄ±äÁ¿)¡£ÔÚJavaÖÐÿ¸öÏß³ÌÓÐ×Ô¼ºµÄ¶ÑÕ»ºÍ³ÌÐò¼ÆÊýÆ÷£¨PC£©£¬ÆäÖжÑÕ»ÊÇÓÃÀ´¸ú×ÙÏ̵߳ÄÉÏÏÂÎÄ£¨ÉÏÏÂÎÄÊǵ±Ïß³ÌÖ´Ðе½Ä³´¦Ê±£¬µ±Ç°µÄ¾Ö²¿±äÁ¿µÄÖµ£©£¬¶ø³ÌÐò¼ÆÊýÆ÷ÔòÓÃÀ´¸ú×Ùµ±Ç°Ïß³ÌÕýÔÚÖ´ÐеÄÖ¸Áî¡£

ÔÚͨ³£Çé¿öÏ£¬Ò»¸öÏ̲߳»ÄÜ·ÃÎÊÁíÍâÒ»¸öÏ̵߳ĶÑÕ»±äÁ¿£¬¶øÇÒÕâ¸öÏ̱߳ØÐë´¦ÓÚÈçÏÂ״̬֮һ£º

1.ÅŶÓ״̬£¨Ready£©£¬ÔÚÓû§´´½¨ÁËÒ»¸öÏß³ÌÒÔºó£¬Õâ¸öÏ̲߳»»áÁ¢¼´ÔËÐС£µ±Ïß³ÌÖеķ½·¨start()±»µ÷ÓÃʱ£¬Õâ¸öÏ߳̾ͻá½øÐÐÅŶÓ״̬£¬µÈ´ýµ÷¶È³ÌÐò½«ËüתÈëÔËÐÐ״̬£¨Running£©¡£µ±Ò»¸ö½ø³Ì±»Ö´ÐкóËüÒ²¿ÉÒÔ½øÐÐÅŶÓ״̬¡£Èç¹ûµ÷¶È³ÌÐòÔÊÐíµÄ»°£¬Í¨¹ýµ÷Ó÷½·¨yield()¾Í¿ÉÒÔ½«½ø³Ì·ÅÈëÅŶÓ״̬¡£

2.ÔËÐÐ״̬(Running)£¬µ±µ÷¶È³ÌÐò½«CPUµÄÔËÐÐʱ¼ä·ÖÅä¸øÒ»¸öỊ̈߳¬Õâ¸öÏ߳̾ͽøÈëÁËÔËÐÐ״̬¿ªÊ¼ÔËÐС£

3.µÈ´ý״̬£¨Waiting£©£¬ºÜ¶àÔ­Òò¶¼¿ÉÒÔµ¼ÖÂÏ̴߳¦Óڵȴý״̬£¬ÀýÈçÏß³ÌÖ´Ðйý³ÌÖб»ÔÝÍ££¬»òÕßÊǵȴýI/OÇëÇóµÄÍê³É¶ø½øÈëµÈ´ý״̬¡£

ÔÚJavaÖв»Í¬µÄÏ߳̾ßÓв»Í¬µÄÓÅÏȼ¶£¬¸ßÓÅÏȼ¶µÄÏ߳̿ÉÒÔ°²ÅÅÔÚµÍÓÅÏȼ¶Ïß³Ì֮ǰÍê³É¡£Èç¹û¶à¸öÏ߳̾ßÓÐÏàͬµÄÓÅÏȼ¶£¬Java»áÔÚ²»Í¬µÄÏß³ÌÖ®¼äÇл»ÔËÐС£Ò»¸öÓ¦ÓóÌÐò¿ÉÒÔͨ¹ýʹÓÃÏß³ÌÖеķ½·¨setPriority()À´ÉèÖÃÏ̵߳ÄÓÅÏȼ¶£¬Ê¹Ó÷½·¨getPriority()À´»ñµÃÒ»¸öÏ̵߳ÄÓÅÏȼ¶¡£


Ï̵߳ÄÉúÃüÖÜÆÚ


Ò»¸öÏ̵߳ĵÄÉúÃüÖÜÆÚ¿ÉÒÔ·Ö³ÉÁ½½×¶Î£ºÉú´æ£¨Alive£©ÖÜÆÚºÍËÀÍö£¨Dead£©ÖÜÆÚ£¬ÆäÖÐÉú´æÖÜÆÚÓÖ°üÀ¨ÔËÐÐ״̬£¨Running£©ºÍµÈ´ý״̬£¨Waiting£©¡£µ±´´½¨Ò»¸öÐÂÏ̺߳ó£¬Õâ¸öÏ߳̾ͽøÈëÁËÅŶÓ״̬£¨Ready£©£¬µ±Ïß³ÌÖеķ½·¨start()±»µ÷ÓÃʱ£¬Ï߳̾ͽøÈëÉú´æÖÜÆÚ£¬ÕâʱËüµÄ·½·¨isAlive()ʼÖÕ·µ»ØÕæÖµ£¬Ö±ÖÁÏ߳̽øÈëËÀÍö״̬¡£


Ï̵߳ÄʵÏÖ


ÓÐÁ½ÖÖ·½·¨¿ÉÒÔʵÏÖỊ̈߳¬Ò»ÖÖÊÇÀ©Õ¹java.lang.ThreadÀ࣬ÁíÒ»ÖÖÊÇͨ¹ýjava.lang.Runnable½Ó¿Ú¡£

ThreadÀà·â×°ÁËÏ̵߳ÄÐÐΪ¡£Òª´´½¨Ò»¸öỊ̈߳¬±ØÐë´´½¨Ò»¸ö´ÓThreadÀàÀ©Õ¹³öµÄÐÂÀà¡£ÓÉÓÚÔÚThreadÀàÖз½·¨run()ûÓÐÌṩÈκεIJÙ×÷£¬Òò´Ë£¬ÔÚ´´½¨Ïß³ÌʱÓû§±ØÐ븲¸Ç·½·¨run()À´Íê³ÉÓÐÓõŤ×÷¡£µ±Ïß³ÌÖеķ½·¨start()±»µ÷ÓÃʱ£¬·½·¨run()ÔÙ±»µ÷Óá£ÏÂÃæµÄ´úÂë¾ÍÊÇͨ¹ýÀ©Õ¹ThreadÀàÀ´ÊµÏÖỊ̈߳º

import java.awt.*;
class Sample1{
public static void main(String[] args){
Mythread test1=new Mythread(1);
Mythread test2=new Mythread(2);
test1.start();
test2.start();
}
}
class Mythread extends Thread {
int id;
Mythread(int i)
{ id=i;}
public void run() {
int i=0;
while(id+i==1){
try {sleep(1000);
} catch(InterruptedException e) {}
}
System.out.println(¡°The id is ¡±+id);
}



ͨ³£µ±Óû§Ï£ÍûÒ»¸öÀàÄÜÔËÐÐÔÚ×Ô¼ºµÄÏß³ÌÖУ¬Í¬Ê±Ò²À©Õ¹ÆäËüijЩÀàµÄÌØÐÔʱ£¬¾ÍÐèÒª½èÖúÔËÐÐRunnable½Ó¿ÚÀ´ÊµÏÖ¡£Runnable½Ó¿ÚÖ»ÓÐÒ»¸ö·½·¨run()¡£²»ÂÛʲôʱºò´´½¨ÁËÒ»¸öʹÓÃRunnable½Ó¿ÚµÄÀ࣬¶¼±ØÐëÔÚÀàÖбàдrun()·½·¨À´¸²¸Ç½Ó¿ÚÖеÄrun()·½·¨¡£ÀýÈçÏÂÃæµÄ´úÂë¾ÍÊÇͨ¹ýRunnable½Ó¿ÚʵÏÖµÄỊ̈߳º

import java.awt.*;
import java.applet.Applet;
public class Bounce extends Applet implements Runnable{
static int r=30;
static int x=100;
static int y=30;
Thread t;
public void init()
{
t = new Thread(this);
t.start();
}
public void run()
{
int y1=+1;
int i=1;
int sleeptime=10;
while(true)
{
y+=(i*y);
if(y-rgetSize().height)
y1*=-1;
try{
t.sleep(sleeptime);
}catch(InterruptedException e){ }
}
}
}


ΪʲôҪʹÓÃÏ̳߳Ø


ÔÚJavaÖУ¬Èç¹ûÿµ±Ò»¸öÇëÇóµ½´ï¾Í´´½¨Ò»¸öÐÂỊ̈߳¬¿ªÏúÊÇÏ൱´óµÄ¡£ÔÚʵ¼ÊʹÓÃÖУ¬Ã¿¸öÇëÇó´´½¨ÐÂÏ̵߳ķþÎñÆ÷ÔÚ´´½¨ºÍÏú»ÙÏß³ÌÉÏ»¨·ÑµÄʱ¼äºÍÏûºÄµÄϵͳ×ÊÔ´£¬ÉõÖÁ¿ÉÄÜÒª±È»¨ÔÚ´¦Àíʵ¼ÊµÄÓû§ÇëÇóµÄʱ¼äºÍ×ÊÔ´Òª¶àµÃ¶à¡£³ýÁË´´½¨ºÍÏú»ÙÏ̵߳ĿªÏúÖ®Í⣬»î¶¯µÄÏß³ÌÒ²ÐèÒªÏûºÄϵͳ×ÊÔ´¡£Èç¹ûÔÚÒ»¸ö JVMÀï´´½¨Ì«¶àµÄỊ̈߳¬¿ÉÄܻᵼÖÂϵͳÓÉÓÚ¹ý¶ÈÏûºÄÄÚ´æ»ò¡°Çл»¹ý¶È¡±¶øµ¼ÖÂϵͳ×ÊÔ´²»×㡣ΪÁË·ÀÖ¹×ÊÔ´²»×㣬·þÎñÆ÷Ó¦ÓóÌÐòÐèҪһЩ°ì·¨À´ÏÞÖÆÈκθø¶¨Ê±¿Ì´¦ÀíµÄÇëÇóÊýÄ¿£¬¾¡¿ÉÄܼõÉÙ´´½¨ºÍÏú»ÙÏ̵߳ĴÎÊý£¬ÌرðÊÇһЩ×ÊÔ´ºÄ·Ñ±È½Ï´óµÄÏ̵߳Ĵ´½¨ºÍÏú»Ù£¬¾¡Á¿ÀûÓÃÒÑÓжÔÏóÀ´½øÐзþÎñ£¬Õâ¾ÍÊÇ¡°³Ø»¯×ÊÔ´¡± ¼¼Êõ²úÉúµÄÔ­Òò¡£

Ï̳߳ØÖ÷ÒªÓÃÀ´½â¾öÏß³ÌÉúÃüÖÜÆÚ¿ªÏúÎÊÌâºÍ×ÊÔ´²»×ãÎÊÌ⡣ͨ¹ý¶Ô¶à¸öÈÎÎñÖØÓÃỊ̈߳¬Ï̴߳´½¨µÄ¿ªÏú¾Í±»·Ö̯µ½Á˶à¸öÈÎÎñÉÏÁË£¬¶øÇÒÓÉÓÚÔÚÇëÇóµ½´ïʱÏß³ÌÒѾ­´æÔÚ£¬ËùÒÔÏû³ýÁËÏ̴߳´½¨Ëù´øÀ´µÄÑÓ³Ù¡£ÕâÑù£¬¾Í¿ÉÒÔÁ¢¼´ÎªÇëÇó·þÎñ£¬Ê¹Ó¦ÓóÌÐòÏìÓ¦¸ü¿ì¡£ÁíÍ⣬ͨ¹ýÊʵ±µØµ÷ÕûÏ̳߳ØÖеÄÏß³ÌÊýÄ¿¿ÉÒÔ·ÀÖ¹³öÏÖ×ÊÔ´²»×ãµÄÇé¿ö¡£
´´½¨Ò»¸öÏ̳߳Ø

Ò»¸ö±È½Ï¼òµ¥µÄÏ̳߳ØÖÁÉÙÓ¦°üº¬Ï̳߳عÜÀíÆ÷¡¢¹¤×÷Ï̡߳¢ÈÎÎñ¶ÓÁС¢ÈÎÎñ½Ó¿ÚµÈ²¿·Ö¡£ÆäÖÐÏ̳߳عÜÀíÆ÷£¨ThreadPool Manager£©µÄ×÷ÓÃÊÇ´´½¨¡¢Ïú»Ù²¢¹ÜÀíÏ̳߳أ¬½«¹¤×÷Ï̷߳ÅÈëÏ̳߳ØÖУ»¹¤×÷Ïß³ÌÊÇÒ»¸ö¿ÉÒÔÑ­»·Ö´ÐÐÈÎÎñµÄỊ̈߳¬ÔÚûÓÐÈÎÎñʱ½øÐеȴý£»ÈÎÎñ¶ÓÁеÄ×÷ÓÃÊÇÌṩһÖÖ»º³å»úÖÆ£¬½«Ã»Óд¦ÀíµÄÈÎÎñ·ÅÔÚÈÎÎñ¶ÓÁÐÖУ»ÈÎÎñ½Ó¿ÚÊÇÿ¸öÈÎÎñ±ØÐëʵÏֵĽӿڣ¬Ö÷ÒªÓÃÀ´¹æ¶¨ÈÎÎñµÄÈë¿Ú¡¢ÈÎÎñÖ´ÐÐÍêºóµÄÊÕβ¹¤×÷¡¢ÈÎÎñµÄÖ´ÐÐ״̬µÈ£¬¹¤×÷Ïß³Ìͨ¹ý¸Ã½Ó¿Úµ÷¶ÈÈÎÎñµÄÖ´ÐС£ÏÂÃæµÄ´úÂëʵÏÖÁË´´½¨Ò»¸öÏ̳߳أ¬ÒÔ¼°´ÓÏ̳߳ØÖÐÈ¡³öÏ̵߳IJÙ×÷£º

public class ThreadPool
{
private Stack threadpool = new Stack();
private int poolSize;
private int currSize=0;
public void setSize(int n)
{
poolSize = n;
}
public void run()
{
for(int i=0;i{
WorkThread workthread=new WorkThread();
threadpool.push(workthread);
currSize++;
}
}
public synchronized WorkThread getworker( )
{
if (threadpool.empty())
system.out.println(¡°stack is empty¡±);
else
try{ return threadpool.pop();
} catch (EmptyStackException e){}
}
}

Ï̳߳ØÊʺÏÓ¦Óõij¡ºÏ
µ±Ò»¸öWeb·þÎñÆ÷½ÓÊܵ½´óÁ¿¶ÌСÏ̵߳ÄÇëÇóʱ£¬Ê¹ÓÃÏ̳߳ؼ¼ÊõÊǷdz£ºÏÊʵģ¬Ëü¿ÉÒÔ´ó´ó¼õÉÙÏ̵߳Ĵ´½¨ºÍÏú»Ù´ÎÊý£¬Ìá¸ß·þÎñÆ÷µÄ¹¤×÷ЧÂÊ¡£µ«Èç¹ûÏß³ÌÒªÇóµÄÔËÐÐʱ¼ä±È½Ï³¤£¬´ËʱÏ̵߳ÄÔËÐÐʱ¼ä±È´´½¨Ê±¼äÒª³¤µÃ¶à£¬µ¥¿¿¼õÉÙ´´½¨Ê±¼ä¶ÔϵͳЧÂʵÄÌá¸ß²»Ã÷ÏÔ£¬´Ëʱ¾Í²»ÊʺÏÓ¦ÓÃÏ̳߳ؼ¼Êõ£¬ÐèÒª½èÖúÆäËüµÄ¼¼ÊõÀ´Ìá¸ß·þÎñÆ÷µÄ·þÎñЧÂÊ¡£
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 0 ÌõÆÀÂÛ