当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:16:00  来源:本站整理

回想runnable[Java编程]

赞助商链接



  本文“回想runnable[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
在本章早些时刻,我曾倡议大家在将一个程序片或主Frame当作Runnable的实现情势之前,一定要好好地想一想.若采取那种方法,就只能在自己的程序中利用此中的一个线程.这便限制了机动性,一旦需求用到属于那种范例的多个线程,就会碰到不必要的麻烦.
当然,假如必须从一个类担当,并且想使类具有线程处理本领,则Runnable是一种精确的筹划.本章最后一个例子对这一点举行了解析,制作了一个RunnableCanvas类,用于为自己描绘差别的颜色(Canvas是“画布”的意思).这个利用被计划成从号令行得到参数值,以决意颜色网格有多大,以及颜色发生改变之间的sleep()有多长.通过应用这些值,大家能体验到线程一些风趣并且大概令人费解的特点:
//: ColorBoxes.java
// Using the Runnable interface
import java.awt.*;
import java.awt.event.*;

class CBox extends Canvas implements Runnable {
  private Thread t;
  private int pause;
  private static final Color[] colors = { 
    Color.black, Color.blue, Color.cyan, 
    Color.darkGray, Color.gray, Color.green,
    Color.lightGray, Color.magenta, 
    Color.orange, Color.pink, Color.red, 
    Color.white, Color.yellow 
  };
  private Color cColor = newColor();
  private static final Color newColor() {
    return colors[
      (int)(Math.random() * colors.length)
    ];
  }
  public void paint(Graphics  g) {
    g.setColor(cColor);
    Dimension s = getSize();
    g.fillRect(0, 0, s.width, s.height);
  }
  public CBox(int pause) {
    this.pause = pause;
    t = new Thread(this);
    t.start(); 
  }
  public void run() {
    while(true) {
      cColor = newColor();
      repaint();
      try {
        t.sleep(pause);
      } catch(InterruptedException e) {}
    } 
  }
} 

public class ColorBoxes extends Frame {
  public ColorBoxes(int pause, int grid) {
    setTitle("ColorBoxes");
    setLayout(new GridLayout(grid, grid));
    for (int i = 0; i < grid * grid; i++)
      add(new CBox(pause));
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        System.exit(0);
      }
    });
  }   
  public static void main(String[] args) {
    int pause = 50;
    int grid = 8;
    if(args.length > 0) 
      pause = Integer.parseInt(args[0]);
    if(args.length > 1)
      grid = Integer.parseInt(args[1]);
    Frame f = new ColorBoxes(pause, grid);
    f.setSize(500, 400);
    f.setVisible(true);  
  }
} ///:~
ColorBoxes是一个典型的利用(程序),有一个构建器用于设置GUI.这个构建器采取int grid的一个参数,用它设置GridLayout(网格筹划),使每一维里都有一个grid单元.随后,它增添得当数目的CBox对象,用它们填充网格,并为每一个都传送pause值.在main()中,我们可看到若何对pause和grid的默许值举行改正(假如用号令行参数传送).
CBox是举行正式工作的地方.它是从Canvas担当的,并实现了Runnable接口,使每个Canvas也能是一个Thread.记着在实现Runnable的时刻,并没有实际产生一个Thread对象,只是一个拥有run()办法的类.因此,我们必须明确地成立一个Thread对象,并将Runnable对象传送给构建器,随后调用start()(在构建器里举行).在CBox里,这个线程的名字叫作t.
请留神数组colors,它对Color类中的全部颜色举行了摆列(列举).它在newColor()顶用于产生一种随机挑选的颜色.当前的单元(格)颜色是cColor.
paint()则相当简单——只是将颜色设为cColor,然后用那种颜色填充整张画布(Canvas).
在run()中,我们看到一个无限循环,它将cColor设为一种随机颜色,然后调用repaint()把它显示出来.随后,对线程履行sleep(),使其“休眠”由号令行指定的时间长度.
由于这种计划筹划非常机动,并且线程处理同每个Canvas元素都精密结合在一同,所以在理论上可以生成肆意多的线程(但在实际利用中,这要遭到JVM可以安闲对付的线程数目的限制).
这个程序也为我们供应了一个风趣的评测基准,因为它揭露了差别JVM机制在速度上造成的戏剧性的差别.
  以上是“回想runnable[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • 回想runnable
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .