前面写过一篇基础的创建多线程的博文

那么本篇博文主要来对照一下这两种创建线程的差别。

继承Thread类:

还拿上篇博客的样例来说:

四个线程各自卖各自的票,说明四个线程之间没有共享,是独立的线程。每一个线程平等。没有优先级关系。

这三个线程不是一次交替运行,而是三个线程同一时候被运行的情况下,有的线程被分配时间片的机会多。票被提前卖完,有的线程被分配的时间片的机会少。票迟一些卖完。

故,利用扩展Thread类创建的多个线程,尽管运行的是同样的代码,但彼此相互独立,且各自拥有自己的资源。互不干扰。

分析Thread类的源代码:

1)Thread类也是实现Runnable接口的。因此实现了Runnable接口中的run方法

2)当生成一个线程对象时,假设没有为其设定名字,那么线程对象的名字将使用例如以下形式:Thread-number,该number将是自己主动添加的。并被全部的Thread对象所共享(由于它是static的成员变量)

3)我们须要重写run方法,由于此时run方法什么事情也不做。

4)当使用Runnable方式生成线程对象时,我们须要实现Runnable接口的run方法,使用new
Thread(new MyThread())来生成线程对象。这时的线程对象的run方法调用MyThread类的run方法,这样我们自己编写的run方法就运行了。

实现Runnable接口:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGl1dGVuZ3RlbmcxMzA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

通过实现Runnable接口来实现线程间资源共享。

继承Thread类与实现Runnable接口的差别:

採用继承Thread类实现多线程:

优势:编写简单,假设须要訪问当前线程。仅仅须要使用this就可以。无需使用Thread.currentThread()方法。

劣势:由于这样的线程类已经继承了Thread类,所以不能再继承其它类。

实现Runnable接口:

优势:线程仅仅是实现了接口,还能够继承其它类。

这样的情况下,能够使多个线程共享一个target对象,所以很适合多个线程用来处理同一份资源的情况,从而能够将cpu、代码和数据分开,形成清晰的模型,较好的体现面向对象思想。

劣势:编程略微复杂。假设须要訪问当前线程,必须使用Thread.currentThread()方法。

实现Runnable接口相对于扩展Thread类来说,具有无可比拟的优势。这样的方式不仅有利于程序的健壮性。使代码可以被多个线程共享。并且代码和数据资源相对独立。从而特别适合多个具有同样代码的线程去处理同一资源的情况。这样一来。线程、代码和数据资源三者有效分离,非常好地体现了面向对象程序设计思想。因此差点儿全部的多线程程序都是通过实现Runnable接口的方式来完毕的。

多线程编程(三)--创建线程之Thread VS Runnable的更多相关文章

  1. 三、多线程之Thread与Runnable的区别

    Thread与Runnable的区别(用三个窗口同时出售10张车票为例子) 运行代码 运行结果 分析 System.out.println("开始测试多线程");class MyT ...

  2. Java多线程之Thread、Runnable、Callable及线程池

    一.多线程 线程是指进程中的一个执行流程,一个进程中可以有多个线程.如java.exe进程中可以运行很多线程.进程是运行中的程序,是内存等资源的集合,线程是属于某个进程的,进程中的多个线程共享进程中的 ...

  3. 慕课网_细说多线程之Thread VS Runnable

    第1章 课前准备 1-1 前言 (00:49) 第2章 Thread VS Runnable 2-1 回顾线程创建的两种方式 (02:33) 继承Thread类 class MyThread exte ...

  4. 实现多线程的三种方法:Thread、Runnable和Callable

    继承Thread类,重写run()方法 步骤: (1) 定义类继承Thread类 (2) 复写Thread类中的run方法. (3) 调用线程的start方法 (start方法有两种含义:1. 启动多 ...

  5. 细说多线程之Thread与Runnable

    1:创建线程的两种方式: 继承Thread类 public class MyThread extends Thread { @Override public void run() { } } MyTh ...

  6. 细说多线程之Thread VS Runnable

    [线程创建的两种方式] [线程的生命周期] ● 就绪:创建了线程对象后,调用了线程的start(). (注意:此时线程只是进入了线程队列,等待获取CPU服务,具备了运行的条件,但并不一定已经开始运行了 ...

  7. 多线程之thread和runnable

    Runnanle方式可以避免Thread由于单继承特性带来的缺陷. Runnable代码可以被多个线程(thread实例)共享,适用于多个线程处理同一资源的情况. 线程的生命周期:创建,就绪,阻塞,运 ...

  8. Android线程之Thread 、Runnable 的两个例子

    Thread例子: package fy.test; import android.app.Activity; import android.os.Bundle; import android.os. ...

  9. Java基础-进程与线程之Thread类详解

    Java基础-进程与线程之Thread类详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.进程与线程的区别 简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程 ...

随机推荐

  1. android中获取某段程序的执行时间

    Date   startDate   =   new   Date(System.currentTimeMillis()); 在收到设备返回数据之后添加如下语句: Date   endDate   = ...

  2. Motion Detection Algorithms视频中运动检测算法源代码及演示代码

    原文地址:http://www.codesoso.com/code/Motion_Detection.aspx 本文实现了在连续视频数据流中几种不同的运动检测算法,他们都是基于当前帧图像和前一帧图像的 ...

  3. MVC之Ajax.BeginForm使用详解之更新列表 mvc验证jquery.unobtrusive-ajax

    MVC之Ajax.BeginForm使用详解之更新列表   1.首先,请在配置文件设置如下:(该项默认都存在且为true) <add key="UnobtrusiveJavaScrip ...

  4. 阿里云maven 库

    阿里云maven 库 , 好用,速度快 maven setting.xml https://github.com/ae6623/Zebra/blob/master/maven-repo-setting ...

  5. JQuery实现选择特定楼层回复

    JQuery实现选择特定楼层回复 需求: 一个论坛里面的小功能,除了回复帖子之外,也能够回复帖子以下的回复.详细实现细节: 每个回复有一个"回复"按钮,点击按钮实现: 在form表 ...

  6. Oracle宣布很多其它的Java 9 新特性

    随着Oracle确认了其余的4个Java 9特性,下一代Java的计划開始变得更清晰了,Oracle已经发布了第二套Java 9特性.自从Oracle在今年早些时候宣布了3个新的API和模块化源代码后 ...

  7. Atitit.获取验证码图片通过web

    Atitit.获取验证码图片通过web 1. WebRequest进行较为底层的访问(不推荐) 1 2. WebBrowser截图 1 3. 剪贴板复制法Clipboard(推荐) 1 4. C# 取 ...

  8. iptables安装失败后-------------firewalld回归

    yum install firewalld systemctl stop iptables; systemctl mask iptables; systemctl unmask firewalld s ...

  9. Spring Cloud心跳监测

    Spring Cloud实现心跳监测,在服务注册和停止时,注册中心能得到通知,并更新服务实例列表 Spring Cloud注册中心添加配置: eureka.server.enable-self-pre ...

  10. weblogic线程阻塞性能调优(图解)转

    声明:出现这个问题有程序方面.网络方面.weblogic设置方面等等原因,此文章主要讲述由于weblogic设置而导致的解决办法. 因为: 1.程序问题,需要项目自己去解决,weblogic在做优化处 ...