啥都先不说,运行两段程序看看结果再分析

实现Runnable接口的程序代码

public class ThreadTest1 implements Runnable {

    private int num = 10;

    @Override
public void run() {
for (int i = 0; i <= 100; i++) {
if (num > 0) {
System.out.println(Thread.currentThread().getName()+"执行结果:" + (num--));
}
} } public static void main(String[] args) {
ThreadTest1 t1 = new ThreadTest1(); Thread t01 = new Thread(t1, "线程1");
Thread t02 = new Thread(t1, "线程2");
Thread t03 = new Thread(t1, "线程3"); t01.start();
t02.start();
t03.start();
}
}

运行结果:

线程2执行结果:
线程3执行结果:
线程3执行结果:
线程1执行结果:
线程3执行结果:
线程2执行结果:
线程3执行结果:
线程3执行结果:
线程1执行结果:
线程2执行结果:

继承Thread类的实现代码

public class ThreadTest2 extends Thread{

    private int num = 10;

    @Override
public void run() { for(int i =0; i <=100; i++) {
if(num >0) {
System.out.println(Thread.currentThread().getName()+"执行结果:"+(num--));
}
}
} public static void main(String[] args) {
ThreadTest2 t01 = new ThreadTest2();
ThreadTest2 t02 = new ThreadTest2();
ThreadTest2 t03 = new ThreadTest2();
t01.start();
t02.start();
t03.start();
}
}

运行结果:

Thread-0执行结果:
Thread-0执行结果:
Thread-0执行结果:
Thread-0执行结果:
Thread-0执行结果:
Thread-0执行结果:
Thread-0执行结果:
Thread-0执行结果:
Thread-0执行结果:
Thread-0执行结果:
Thread-1执行结果:
Thread-1执行结果:
Thread-1执行结果:
Thread-1执行结果:
Thread-1执行结果:
Thread-1执行结果:
Thread-1执行结果:
Thread-1执行结果:
Thread-2执行结果:
Thread-2执行结果:
Thread-2执行结果:
Thread-1执行结果:
Thread-2执行结果:
Thread-1执行结果:
Thread-2执行结果:
Thread-2执行结果:
Thread-2执行结果:
Thread-2执行结果:
Thread-2执行结果:
Thread-2执行结果:

从上面的运行结果可以看出,两者的区别。

实现Runnable接口的,对于三个线程来说共享的是ThreadTest1对象的资源。

继承Thread类,三个线程都是独立的运行,线程间不共享资源。

所以可以总结出以下区别:

1.Runnable接口的话,可以避免单继承的局限性,具有较强的健壮性。

2.Runnable可以实现资源的共享,同时处理同一资源。

3.Thread类的线程间都是独立运行的,资源不共享。

4.继承Thread类不再被其他类继承(java不存在多继承)

实现Runnable和继承Thread的区别的更多相关文章

  1. Java 多线程实现接口Runnable和继承Thread区别(转)

    Java 多线程实现接口Runnable和继承Thread区别 Java中有两种实现多线程的方式.一是直接继承Thread类,二是实现Runnable接口.那么这两种实现多线程的方式在应用上有什么区别 ...

  2. 实现Runnable接口和继承Thread类区别

    如果一个类继承Thread,则不适合资源共享.但是如果实现了Runable接口的话,则很容易的实现资源共享. 实现Runnable接口比继承Thread类所具有的优势: 1):适合多个相同的程序代码的 ...

  3. (转)多线程——继承Thread 类和实现Runnable 接口的区别

    java中我们想要实现多线程常用的有两种方法,继承Thread 类和实现Runnable 接口,有经验的程序员都会选择实现Runnable接口 ,其主要原因有以下两点: 首先,java只能单继承,因此 ...

  4. java中的线程问题(三)——继承Thread VS 实现Runnable的区别

    从java的设计来看,通过继承Thread或者实现Runnable接口来创建线程本质上没有区别,从jdk帮助文档我们可以看到Thread类本身就实现了Runnable接口,如果一定要说它们有什么区别, ...

  5. 【多线程学习(2)】继承Thread类和实现Runnable接口、Callable接口的区别

    1)Runnable和Callable同是接口 * Callable的任务执行后可返回值,而Runnable的任务是不能返回值(是void);call方法可以抛出异常,run方法不可以 * 运行Cal ...

  6. 多线程——Java中继承Thread类与实现Runnable接口的区别

    线程我只写过继承Thread类的,后来知道java多线程有三种方式,今天首先比较一下常用的继承Thread类和实现Runnable接口的区别. 按着Ctrl键进入Thread之后,发现Thread类也 ...

  7. 多线程——继承Thread 类和实现Runnable 接口的区别

    java中我们想要实现多线程常用的有两种方法,继承Thread 类和实现Runnable 接口,有经验的程序员都会选择实现Runnable接口 ,其主要原因有以下两点: 首先,java只能单继承,因此 ...

  8. java 多线程 继承Thread和实现Runnable的区别

    1)继承Thread: public class ThreadTest extends Thread { private int count; private String name; public ...

  9. Java中继承thread类与实现Runnable接口的区别

    Java中线程的创建有两种方式: 1.  通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中 2.  通过实现Runnable接口,实例化Thread类 在实际应用中, ...

随机推荐

  1. python常见模块之os模块

    os模块是python系统与操作系统交互的一个接口 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前 ...

  2. 001-linux scp文件拷贝

    scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的.可能会稍微影响一下速度.当你服务器 ...

  3. jmeter使用代理服务器录制脚本端口号被占用

    初学jmeter工具,在设置端口号时,使用8080,IE设置的局域网端口也为8080,启动代理服务器时,提示:Could not create script recorder-port in use. ...

  4. Selenium之使用PageFactory初始化pageobject

    使用PageFactory初始化pageobject有什么作用呢,下面举个例子来说明 public BaiduPage baiduPage = PageFactory.initElements(dri ...

  5. day6-面向对象

    Python 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前没有接触过 ...

  6. HDU 1142 A Walk Through the Forest(Dijkstra+记忆化搜索)

    题意:看样子很多人都把这题目看错了,以为是求最短路的条数.真正的意思是:假设 A和B 是相连的,当前在 A 处, 如果 A 到终点的最短距离大于 B 到终点的最短距离,则可以从 A 通往 B 处,问满 ...

  7. [转]DNS服务器原理详解与Centos6.x下搭建DNS服务器

    转自:http://blog.it985.com/8958.html DNS 数据库的记录:正解,反解, Zone 的意义 通过DNS解析过程详解这篇文章,我们知道了要想访问www.zmit.cn,最 ...

  8. linux meta 18.0.1 系统安装nodejs

    前置条件是:需要准备sudo apt-get 命令 第一步: 执行命令sudo apt-get install nodejs 即可安装, 之后可使用node -v 查看版本node 版本号 第二步: ...

  9. 裁剪TOGAF进行产品架构开发

    http://ea.zhoujingen.cn/56.html . 有人和我说“周老师,我的企业条件不适合,学习企业架构没用.” 如果等公司让我用企业架构,估计会比我自己开始晚七八年.我们学习任何内容 ...

  10. 关于TOSCA自动化测试工具, 我想问一些问题(持续整理中)

    通过学习,实践踩坑,有以下问题不太明白 1.  Artifacts and results from your complete test portfolio (cross-browser, mobi ...