(转贴)使用Runnable接口

[b]使用Runnable接口[/b]

我们知道,Java中的类只能够是单继承,也就是说,如果一个类为了使用线程而继承了Thread类,它就不能再继承别的类了。这很可能给编程带来不便。本节中介绍的就是一种脱离继承来使用线程的方法。这个方法的核心就是Runnable接口。

Runnable接口的全限定名是java.lang.Runnable。它其中只有一个抽象方法void run()。为了了解如何在线程中使用Runnable接口,我们还需要看一下Thread类中的一个叫做target的属性和Thread类中的run()方法。Thread类中有一个类型为Runnable的属性,叫做target。而Thread类的run()方法用到了这个属性,run()方法的代码如下:

    
public void run() {
// Thread类的run()方法
if (target != null) {
// 检查target属性是否为空,target属性是Runnable

// 类型的引用
target.run();
// 如果不为空则执行run()方法
}
// 否则什么都不做
}
// run()方法结束


如何让target的值不为null呢?Thread类的另一个构造方法就是用来给target属性赋值的,这个构造方法是Thread(Runnable)。当调用这个构造方法时,传递过来的参数就会赋值给target属性。也就是说,如果直接使用Thread类也是可以的,步骤如下:

(1)实现Runnable接口,例如叫做MyRunnable,并在MyRunnable类的run()方法里编写想要让线程做的事情。

(2)创建一个MyRunnable的实例。

(3)通过构造方法Thread(Runnable)来创建Thread类的实例。

这时再调用start()方法启动这个线程,执行的就是MyRunnable中run()方法的代码了。下面我们来使用以下这种方法,首先是MyRunnable类。

    
package com.javaeasy.usethread;
// 程序在的包

public class MyRunnable implements Runnable {
// 实现Runnable接口
public void run() {
// 实现run()方法
System.out.println("这是在另一个线程中执行的代码。");

// 向控制台输出一行字
}
// run()方法结束
}


在例程中,按照步骤分别创建MyRunnable类的实例,调用Thread相应的构造方法,最后启动线程。因为Runnable是个接口,为了简单一些,还可以使用前面学到过的匿名类来实现相同的功能。使用匿名类的例程如下:

    
package com.javaeasy.usethread;

public class UseRunnable {
public static void main(String[] args) {
// 测试类的main()方法
// 创建一个线程,参数为一个实现了Runnable接口的匿名类的实例
Thread thread = new Thread(new Runnable() {
public void run() {
// 实现抽象方法run()
System.out.println("这是在另一个线程中执行的代码。");
}
});
thread.start();
// 启动线程
}
}


例程UseRunnable其实和例程UseMyRunnable是一样的。当然,从本质上讲,无论是使用继承还是使用Runnable接口,其目的都是一样的。让线程执行我们写的一段代码。使用继承并覆盖run()方法也好;使用Runnable接口也好,都是为了指定线程执行的方法。

当一个新的线程启动以后,程序就相当于是有两个同时在执行的线程。没错,事情就是这样的。就好像演奏会上的两个演奏家一样,两个演奏家是一起演奏各自的乐谱。两个线程也是各自执行自己的代码,彼此之间互不影响。但是事情到这里就开始变得有意思了:一个程序内有两个线程。

使用Runnable接口来让线程执行自己编写的run()方法。

[color=red]运行run()方法并不等于运行start();strart()才是真正将线程放到等待队列.但此时也并不一定要马上开始执行。只是将这个线程置于可动行状态.这点是必须搞清楚的.

r.run()只能说是调用了这个类的方法.并不是将线程放入线程池.......紧记紧记!!!! [/color]

转自:[url]http://book.51cto.com/art/201004/192378.htm[/url]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值