技术开发 频道

Android开发中的多线程编程技术

  Java中的实现线程体方式3

  实现线程体方式3是实现线程体方式2的变种,本质上还是实现线程体方式2,但是在Android应用开发中经常采用第3种方式。下面我们看第3种方式的计时器代码清单8-3,完整代码请参考chapter8_2工程中 chapter8_2_2代码部分。

  【代码清单8-3】

public class chapter8_2_2 extends Frame implements ActionListener {

    
private Label label;
    
private Button button1;
    
private Thread clockThread;

    
private boolean isRunning = false;
    
private int timer = 0;

    
public chapter8_2_2() {
        button1
= new Button("结束计时");
        label
= new Label("计时器启动...");
        button1.addActionListener(this);
        setLayout(
new BorderLayout());
        add(button1,
"North");
        add(label,
"Center");
        setSize(
320, 480);
        setVisible(
true);

        
/* 线程体是Clock对象本身,线程名字为"Clock" */
        clockThread
= new Thread(new Runnable() {
            @Override
            
public void run() {
                
while (isRunning) {
                    try {
                        Thread.currentThread().sleep(
1000);
                        
timer++;
                        label.setText(
"逝去了 " + timer + "");
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        });

        clockThread.start();
/* 启动线程 */
        isRunning
= true;
    }

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

    
public static void main(String args[]) {
        chapter8_2_2 a
= new chapter8_2_2();
    }

    }

  与第2种方式比较,我们发现Frame类不再实现Runnable接口了,而是在实例化Thread类的时候,定义了一个实现Runnable接口的匿名内部类:

clockThread = new Thread(new Runnable() {
            @Override
            
public void run() {
                
while (isRunning) {
                    try {
                        Thread.currentThread().sleep(
1000);
                        
timer++;
                        label.setText(
"逝去了 " + timer + "");
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
    });

  有关Java多线程的内容还有很多,例如线程优先级、线程同步等,由于这些内容与本书关系不是很紧密,所以不再介绍了,有关其他的线程知识可以参考Java方面的书籍。接下来介绍一下Android中的线程。

1
相关文章