CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

线程优先级问题

楼主crs_zxf()2005-03-30 16:49:00 在 Java / J2SE / 基础类 提问

import   java.awt.*;  
  import   java.util.*;  
   
  class   Bounce   extends   Frame   {  
              private   Canvas   canvas;  
               
              public   Bounce()   {  
          setTitle("Bounce");  
          canvas   =   new   Canvas();  
          add("Center",   canvas);  
          Panel   p   =   new   Panel();  
          p.add(new   Button("Start"));  
          p.add   (new   Button("Express"));  
          p.add(new   Button("Close"));  
          add("South",   p);  
              }  
               
              public   boolean   handleEvent(Event   evt)   {  
          if(evt.id   ==   Event.WINDOW_DESTROY)  
      System.exit(0);  
           
          return   super.handleEvent(evt);  
              }  
               
              public   boolean   action(Event   evt,   Object   arg)   {  
          if(arg.equals   ("Start"))   {  
      Ball   b   =   new   Ball(canvas,   Color.BLACK);  
      b.setPriority   (Thread.NORM_PRIORITY);   //设置优先级  
      b.start();  
          }    
          else   if(arg.equals   ("Express"))   {  
      Ball   b   =   new   Ball(canvas,   Color.YELLOW);  
      b.setPriority   (Thread.MAX_PRIORITY);   //设置优先级  
      b.start   ();  
          }  
          else   if(arg.equals   ("Close"))    
      System.exit(0);  
          else   return   super.action(evt,   arg);  
           
          return   true;  
              }  
               
              public   static   void   main(String[]   args)    
              {  
          Frame   f   =   new   Bounce();  
          f.resize   (500,   350);  
          f.show();  
              }  
  }  
   
  class   Ball   extends   Thread{   //小球线程  
              private   Canvas   box;  
              private   final   static   int   XSIZE   =   10;  
              private   final   static   int   YSIZE   =   10;  
              private   int   x   =   0;  
              private   int   y   =   0;  
              private   int   dx   =   2;  
              private   int   dy   =   2;  
              private   Color   color;  
               
              public   Ball(Canvas   c,   Color   co)   {  
          box   =   c;  
          color   =   co;  
              }  
               
              public   void   draw()   {  
          Graphics   g   =   box.getGraphics   ();  
          g.setColor(color);  
          g.fillOval   (x,   y,   XSIZE,   YSIZE);  
          g.dispose   ();  
              }  
               
              public   void   move()   {  
          Graphics   g   =   box.getGraphics   ();  
          g.setXORMode   (box.getBackground   ());  
          g.setColor(color);  
          g.fillOval   (x,   y,   XSIZE,   YSIZE);  
           
          x   +=   dx;  
          y   +=   dy;  
           
          Dimension   d   =   box.size   ();  
           
            if(x   <   0)   {  
      x   =   0;  
      dx   =   -dx;  
            }  
          if(x   +XSIZE   >=   d.width)   {  
      x   =   d.width   -   XSIZE;  
      dx   =   -dx;  
          }  
          if(y   <   0)   {  
      y   =   0;  
      dy   =   -dy;  
          }  
          if(y   +   YSIZE   >=   d.height)   {  
      y   =   d.height   -   YSIZE;  
      dy   =   -dy;  
          }  
          g.fillOval   (x,   y,   XSIZE,   YSIZE);  
          g.dispose   ();  
              }  
               
              public   void   run()   {  
          draw();  
         
          for(;   ;)   {  
      move();  
      try   {  
  Thread.sleep   (10);  
      }   catch(InterruptedException   e)   {  
      }  
          }  
              }  
  }  
   
  在这个程序中,我设置了两个小球并为他们设置了优先级,但两个小球  
  的运行效果完全相同,为什么?  
  问题点数:25、回复次数:2Top

1 楼killme2008(为了生态平衡,请保护蛤蟆)回复于 2005-03-30 17:53:40 得分 25

。。优先级只是代表优先级高获得cpu的时间相对多点,它不能保证程序的运行顺序  
  不要指望通过设置优先级来调配线程Top

2 楼crs_zxf()回复于 2005-03-30 18:51:08 得分 0

但在我把这个程序改成以下这样时却有了运行效果的不同:  
  import   java.awt.*;  
  import   java.util.*;  
   
  class   Bounce   extends   Frame   {  
              private   Canvas   canvas;  
               
              public   Bounce()   {  
          setTitle("Bounce");  
          canvas   =   new   Canvas();  
          add("Center",   canvas);  
          Panel   p   =   new   Panel();  
          p.add(new   Button("Start"));  
          p.add   (new   Button("Express"));  
          p.add(new   Button("Close"));  
          add("South",   p);  
              }  
               
              public   boolean   handleEvent(Event   evt)   {  
          if(evt.id   ==   Event.WINDOW_DESTROY)  
      System.exit(0);  
           
          return   super.handleEvent(evt);  
              }  
               
              public   boolean   action(Event   evt,   Object   arg)   {  
          if(arg.equals   ("Start"))   {  
      Ball   b   =   new   Ball(canvas,   Color.BLACK);  
      b.setPriority   (Thread.NORM_PRIORITY);  
      b.start();  
          }    
          else   if(arg.equals   ("Express"))   {  
      Ball   b   =   new   Ball(canvas,   Color.YELLOW);  
      b.setPriority   (Thread.MAX_PRIORITY);  
      b.start   ();  
          }  
          else   if(arg.equals   ("Close"))    
      System.exit(0);  
          else   return   super.action(evt,   arg);  
           
          return   true;  
              }  
               
              public   static   void   main(String[]   args)    
              {  
          Frame   f   =   new   Bounce();  
          f.resize   (500,   350);  
          f.show();  
              }  
  }  
   
  class   Ball   extends   Thread{  
              private   Canvas   box;  
              private   final   static   int   XSIZE   =   10;  
              private   final   static   int   YSIZE   =   10;  
              private   int   x   =   0;  
              private   int   y   =   0;  
              private   int   dx   =   2;  
              private   int   dy   =   2;  
              private   Color   color;  
               
              public   Ball(Canvas   c,   Color   co)   {  
          box   =   c;  
          color   =   co;  
              }  
               
              public   void   draw()   {  
          Graphics   g   =   box.getGraphics   ();  
          g.setColor(color);  
          g.fillOval   (x,   y,   XSIZE,   YSIZE);  
          g.dispose   ();  
              }  
               
              public   void   move()   {  
          Graphics   g   =   box.getGraphics   ();  
          g.setXORMode   (box.getBackground   ());  
          g.setColor(color);  
          g.fillOval   (x,   y,   XSIZE,   YSIZE);  
           
          x   +=   dx;  
          y   +=   dy;  
           
          Dimension   d   =   box.size   ();  
           
            if(x   <   0)   {  
      x   =   0;  
      dx   =   -dx;  
            }  
          if(x   +XSIZE   >=   d.width)   {  
      x   =   d.width   -   XSIZE;  
      dx   =   -dx;  
          }  
          if(y   <   0)   {  
      y   =   0;  
      dy   =   -dy;  
          }  
          if(y   +   YSIZE   >=   d.height)   {  
      y   =   d.height   -   YSIZE;  
      dy   =   -dy;  
          }  
          g.fillOval   (x,   y,   XSIZE,   YSIZE);  
          g.dispose   ();  
              }  
               
              public   void   run()   {  
          draw();  
         
          for(;   ;)   {  
      move();  
      try   {  
  Thread.sleep   (10);  
      }   catch(InterruptedException   e)   {  
      }  
          }  
              }  
  }  
  这又是为什么呢?Top

相关问题

  • 关于windows线程优先级
  • 关于java线程调度优先级
  • 一个小问题:线程优先级
  • 有关线程优先级的问题,谢谢!
  • 请高手指点一个线程优先级控制问题!
  • 线程的优先级的好处是什么?
  • 主线程的优先级怎么设置?
  • 关于c++builer主线程优先级的设置
  • 建立线程如何传递参数?如何设定线程的优先级?
  • 做一般的应用程序,线程优先级应选多少?

关键词

  • 线程
  • start
  • 优先级
  • canvas
  • evt
  • ysize
  • xsize
  • bounce
  • ball
  • filloval

得分解答快速导航

  • 帖主:crs_zxf
  • killme2008

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo