《Java多线程编程核心技术(第2版)》 —1.2.6 使用Runnable接口实现多线程的优点

举报
华章计算机 发表于 2020/02/08 13:42:18 2020/02/08
【摘要】 本节书摘来自华章计算机《Java多线程编程核心技术(第2版)》 一书中第1章,第1.2.6节,作者是高洪岩。

1.2.6 使用Runnable接口实现多线程的优点

使用继承Thread类的方式来开发多线程应用程序在设计上是有局限性的,因为Java是单根继承,不支持多继承,所以为了改变这种限制,可以使用实现Runnable接口的方式来实现多线程技术。下面来看使用Runnable接口必要性的演示代码。

创建测试用的项目moreExtends,首先来看业务A类,代码如下:

package service;

 

public class AServer {

    public void a_save_method() {

        System.out.println("a中的保存数据方法被执行");

    }

}

再来看业务B类,代码如下:

package service;

 

public class BServer1 extends AServer,Thread

{

 

    public void b_save_method() {

        System.out.println("b中的保存数据方法被执行");

    }

}

BServer1.java类不支持在extends关键字后写多个类名,即Java并不支持多继承的写法,所以在代码“public class BServer1 extends AServer, Thread”处出现如下异常信息:

Syntax error on token "extends", delete this token

这时就有使用Runnable接口的必要性了,创建新的业务B类,代码如下:

package service;

 

public class BServer2 extends AServer implements Runnable {

    public void b_save_method() {

        System.out.println("b中的保存数据方法被执行");

    }

 

    @Override

    public void run() {

        b_save_method();

    }

}

程序不再出现异常,通过实现Runnable接口,可间接地实现“多继承”的效果。

另外,需要说明的是Thread.java类也实现了Runnable接口,如图1-17所示。

 image.png

图1-17 Thread.Java类实现Runnable接口

这意味着构造函数Thread(Runnable target)不仅可以传入Runnable接口的对象,而且可以传入一个Thread类的对象,这样做完全可以将一个Thread对象中的run()方法交由其他线程进行调用,示例代码如下:

public class Test {

    public static void main(String[] args) {

        MyThread thread = new MyThread();

        //MyThread是Thread的子类,而Thread是Runnable实现类

        //所以MyThread也相当于Runnable的实现类

        Thread t = new Thread(thread);

        t.start();

    }

}

在非多继承的情况下,使用继承Thread类和实现Runnable接口两种方式在取得程序运行的结果上并没有什么太大的区别,一旦出现“多继承”的情况,则采用实现Runnable接口的方式来处理多线程的问题是很有必要的。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。