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

实现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. git从历史上的某一次提交处建立分支

    $ git log --oneline --all --graph --decorate * 1efcf18 (HEAD -> master) commit * 6a7ace8 commit * ...

  2. java 多线程 day15 CyclicBarrier 路障

    import java.util.concurrent.CyclicBarrier;import java.util.concurrent.ExecutorService;import java.ut ...

  3. Spark ML Pipeline简介

    Spark ML Pipeline基于DataFrame构建了一套High-level API,我们可以使用MLPipeline构建机器学习应用,它能够将一个机器学习应用的多个处理过程组织起来,通过在 ...

  4. 微信js-sdk使用

    <?php $appid=""; $secret=""; class JSSDK { private $appId; private $appSecret ...

  5. PKU 3169 Layout(差分约束系统+Bellman Ford)

    题目大意:原题链接 当排队等候喂食时,奶牛喜欢和它们的朋友站得靠近些.FJ有N(2<=N<=1000)头奶牛,编号从1到N,沿一条直线站着等候喂食.奶牛排在队伍中的顺序和它们的编号是相同的 ...

  6. Django restful Framework 之序列化与反序列化

    1. 首先在已建好的工程目录下新建app命名为snippets,并将snippets app以及rest_framework app加到工程目录的 INSTALLED_APPS 中去,具体如下: IN ...

  7. python的socket网络编程(二)

    (注:本文部分内容摘自互联网,由于作者水平有限,不足之处,还望留言指正.) 国庆八天假,已过去3天了,加上明天又是中秋,还是决定在今晚把之前想写的东西写完.国庆节在宁波老家,吃好喝好睡好,就是没有好好 ...

  8. centos ssh免密码秘钥登录

    假设从A主机ssh登录B主机,用秘钥代替密码,步骤如下: 1.在A主机上执行:ssh-keygen -t  rsa 一切默认,不用输入密码,生成两个文件: /root/.ssh/id_rsa /roo ...

  9. IDEA 2018.2破解

    最新的IDEA激活方式 使用网上传统的那种输入网址的方式激活不了,使用http://idea.lanyus.com/这个网站提供的工具进行 1.进入hosts文件中:C:\Windows\System ...

  10. oracle中修改表已有数据的某一列的字段类型的方法,数据备份

    1.在开发过程中经常会遇到表中的某一个字段数据类型不对,比如说需要保存的数据带小数,但是在最初设计的时候是给的number(10)类型,开始保存是整数的时候满足要求,后来在保存小数的时候 会发现自动四 ...