15.2.3使用runnable接口
我知道Java的类只能是单一继承。 这意味着如果一个类继承了Thread类以使用线程,则不能继承另一个类。 这很可能给编程带来不便。 本节说明脱离继承而使用线程的方法。 该方法的核心是Runnable接口。
Runnable接口的完全限定名称为java.lang.Runnable。 其中只有一种抽象的方法。 void run (。 要了解如何在线程中使用Runnable接口,还必须参考Thread类的target属性和Thread类的run ()方法。 Thread类具有名为target的Runnable类型的属性。 Thread类的run (方法使用此属性。 run ) )方法的代码如下。
publicvoidrun () {//Thread类的run ) }方法
目标!=null (检查target属性是否为空且target属性为Runnable
//类型引用
target.run (; //如果不为空,则执行run (方法
//否则什么也不做
(}//run ) )方法结束
如何避免target的值为空? Thread类的另一种构建方法是为名为thread(runnable )的target属性赋值。 调用此构造方法时,传递的参数会分配给target属性。 也就是说,可以直接使用Thread类,但步骤如下。
)1)例如安装被称为MyRunnable的Runnable接口,在MyRunnable系的run ) )方法中写下想让线程做的事情。
)2)创建MyRunnable的实例。
)3)构建方法Thread(runnable )以创建thread类的实例。
此时,start (调用该方法调用此线程时,为MyRunnable的run ) )方法的代码将执行。 尝试使用以下方法。 首先是MyRunnable类。
packagecom.javaeasy.usethread; //装有程序的包
publicclassmyrunnableimplementsrunnable {//runnable接口的实现
公共void run () run )方法的实现
System.out.println (这是在另一个线程上执行的代码。 ' );
//在控制台上输出一行
(}//run ) )方法结束
}
MyRunnable实现了一个Runnable接口,其run ()方法是线程执行的方法。 然后是例行程序。
packagecom.javaeasy.usethread;
publicclassUseMyRunnable{
publicstaticvoidmain (string [ ] args )//例程的main )方法
创建//MyRunnable类的实例,MyRunnable,MyRunnable实现了runnable
//接口
myrunnablerunnable=newmyrunnable (;
thread thread=new thread (runnable; 调用Thread的相应结构
//方法,传递参数
thread.start (; //启动线程
}
}
例程按照步骤创建MyRunnable类的每个实例,调用与Thread对应的构造方法,最后调用线程。 因为Runnable是一个接口,所以为了简单起见,您也可以使用之前学到的匿名类来实现相同的功能。 使用匿名类的例程如下。
packagecom.javaeasy.usethread;
publicclassUseRunnable{
publicstaticvoidmain (string [ ] args )//测试类的main )方法
创建作为实现Runnable接口的匿名类实例的线程
thread thread=new thread (new runnable () ) )。