Android开发中的多线程(2)

Java中的实现线程体方式2

  上面介绍继承Thread方式实现线程体,下面介绍另一种方式,这种方式是提供一个实现接口Runnable的类作为一个线程的目标对象,构造线程时有两个带有Runnable target参数的构造方法:

  Thread(Runnable target);

  Thread(Runnable target, String name)。

  其中的target就是线程目标对象了,它是一个实现Runnable的类,在构造Thread类时候把目标对象(实现Runnable的类)传递给这个线程实例,由该目标对象(实现Runnable的类)提供线程体run()方法。这时候实现接口Runnable的类仍然可以继承其他父类。

请参看代码清单,这是一个Java AWT的窗体应用程序。

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class textThread2 extends Frame implements Runnable, ActionListener {

public Label label;
    public Button button;
    public Thread ClockThread;
    public boolean isRunning;
    public int timer = 0;

public textThread2() {
        button = new Button("停止计时器");
        label = new Label("计算器启动");
        button.addActionListener(this);
        setLayout(new BorderLayout());
        add(button, "North");
        add(label, "Center");
        setSize(320, 480);
        setVisible(true);

// textThread2 textThread2 = new textThread2();
        ClockThread = new Thread(this);
        ClockThread.start();
        isRunning = true;
    }

@Override
    public void actionPerformed(ActionEvent e) {
        isRunning = false;
    }

@Override
    public void run() {
        // TODO Auto-generated method stub
        try {
            while (isRunning) {
                Thread.currentThread().sleep(1000);
                timer++;
                label.setText("逝去了" + timer);
            }
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

}

/**
    * @param args
    */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        textThread2 textThread2 = new textThread2();
    }
}

其中关于Java AWT知识就不在这里介绍了,有兴趣的读者可以自己看看相关书籍。在本例中构建AWT窗体的应用程序方式是继承Frame类。采用第1种方式——继承方式实现线程体是不可以的,因为Java是单继承的,这个类不能既继承Frame又继承Thread。应该采用第2种方式——实现Runnable接口方式。Runnable接口也有一个run()方法,它是实现线程体方法,其代码处理与上一节是一样。需要注意的是,在第2种方法中,创建了一个Thread成员变量clockThread,才用构造方法new Thread(this)创建一个线程对象,其中创建线程使用的构造方法是Thread(Runnable target),其中的this就是代表本实例,它是一个实现了Runnable接口的实现类。

程序运行结果如图所示,屏幕开始加载的时候线程启动开始计算时间,1s更新一次UI,当单击“结束计时”按钮时,停止计时。

Android开发中的多线程

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/f1baa8899bd94a6d182a2f2be75f728e.html