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

用主类归并线程[Java编程]

赞助商链接



  本文“用主类归并线程[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
在上面的例子中,我们看到线程类(Thread)与程序的主类(Main)是脱离开的.这样做非常公道,并且易于理解.但是,还有另一种方法也是常常要用到的.固然它不十清楚确,但普通都要更简便一些(这也注释了它为什么非常风行).通过将主程序类变成一个线程,这种情势可将主程序类与线程类归并到一同.由于对一个GUI程序来说,主程序类必须从Frame或Applet担当,所以必须用一个接口加入额外的功效.这个接口叫作Runnable,此中包含了与Thread一致的基本办法.事实上,Thread也实现了Runnable,它只指出有一个run()办法.
对归并后的程序/线程来说,它的用法不是十清楚确.当我们启动程序时,会成立一个Runnable(可运行的)对象,但不会自行启动线程.线程的启动必须明确举行.下面这个程序向我们演示了这一点,它再现了Counter2的功效:
//: Counter3.java
// Using the Runnable interface to turn the 
// main class into a thread.
import java.awt.*;
import java.awt.event.*;
import java.applet.*;

public class Counter3 
    extends Applet implements Runnable {
  private int count = 0;
  private boolean runFlag = true;
  private Thread selfThread = null;
  private Button 
    onOff = new Button("Toggle"),
    start = new Button("Start");
  private TextField t = new TextField(10);
  public void init() {
    add(t);
    start.addActionListener(new StartL());
    add(start);
    onOff.addActionListener(new OnOffL());
    add(onOff);
  }
  public void run() {
    while (true) {
      try {
        selfThread.sleep(100);
      } catch (InterruptedException e){}
      if(runFlag) 
        t.setText(Integer.toString(count++));
    }
  }
  class StartL implements ActionListener {
    public void actionPerformed(ActionEvent e) {
      if(selfThread == null) {
        selfThread = new Thread(Counter3.this);
        selfThread.start();
      }
    }
  }
  class OnOffL implements ActionListener {
    public void actionPerformed(ActionEvent e) {
      runFlag = !runFlag;
    }
  }
  public static void main(String[] args) {
    Counter3 applet = new Counter3();
    Frame aFrame = new Frame("Counter3");
    aFrame.addWindowListener(
      new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
          System.exit(0);
        }
      });
    aFrame.add(applet, BorderLayout.CENTER);
    aFrame.setSize(300,200);
    applet.init();
    applet.start();
    aFrame.setVisible(true);
  }
} ///:~
目前run()位于类内,但它在init()完毕今后仍处在“就寝”状况.若按下启动按钮,线程便会用多少有些暧昧的表达方法成立(若线程尚不存在):
new Thread(Counter3.this);
若某样东西有一个Runnable接口,实际只是意味着它有一个run()办法,但不存在与之相关的任何特别东西——它不具有任何天生的线程处理本领,这与那些从Thread担当的类是差别的.所认为了从一个Runnable对象产生线程,必须单独成立一个线程,并为其传送Runnable对象;可为其利用一个特别的构建器,并令其采取一个Runnable作为自己的参数利用.随后便可为那个线程调用start(),以下所示:
selfThread.start();
它的作用是履行通例初始化操作,然后调用run().
Runnable接口最大的一个长处是全部东西都从属于相同的类.若需拜候什么东西,只需简单地拜候它便可,不需求触及一个独立的对象.但为这种便利也是要付出代价的——只可为那个特定的对象运行单独一个线程(固然可成立那种范例的多个对象,大概在差别的类里成立其他对象).
注意Runnable接口本身并非造成这一限制的罪魁祸首.它是由于Runnable与我们的主类归并造成的,因为每个利用只能主类的一个对象.
  以上是“用主类归并线程[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • 用主类归并线程
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        100%(1)

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

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