日期:2014-05-20  浏览次数:20686 次

java 里面对Thread的sleep的理解问题!!!急!急!在线等!!!
本人是个新手,这是一个小程序,可以自动的把圆圈从小变大.先看程序吧:
import   java.awt.*;
import   java.applet.*;
public   class   app45   extends   Applet   implements   Runnable
{     Thread   t=null;
int   x,y,r;
    public   void   init()
    {
          x=100;
              y=100;
            r=10;
    }  
    public   void   paint(Graphics   g)
    {     g.setColor(Color.white);
          g.drawArc(x,y,r,r,0,360);
          if(t!=null&&r <300)
          {r+=10;
          g.setColor(Color.pink);
          g.drawArc(x,y,r,r,0,360);
          if(r> 300)
              t.stop();
          }
       
    }
    public   void   start()
    {     if(t==null)
        {   t=new   Thread(this);
              t.start();}
    }
    public   void   stop()
    {   t.stop();
        t=null;
    }
    public   void   run()
    {    
        while(t!=null)
        {try
        {   Thread.sleep(800);
        }
        catch(InterruptedException   e)
        {}
        repaint();  //这个地方不太明白
        }
    }
    public   void   update(Graphics   g)
          {paint(g);}
  }
这个地方不太明白:这里面有几个线程?是不是类本身app45实现runnable接口算一个,然后t也算一个呢?这就2个了???
书上说Thread.sleep(800);是为了程序的执行暂时停下来,使得CPU有时间去调用repaint()方法.线程暂停sleep是把CPU让给其他正在排队的线程呀,让给哪个线程呢?如果已经让给别的线程了,那暂停下来的线程还怎么会去执行repaint呢?


------解决方案--------------------
sleep 就是停止当前进程800ms 让给repaint()所重绘的组件
对于本程序而言repaint()方法会调用此组件的 paint 方法。就是CPU时间交给paint()这个方法
------解决方案--------------------
意思是:把CPU交给处理用户输入的线程。