多线程编程(三)--创建线程之Thread VS Runnable
前面写过一篇基础的创建多线程的博文:
那么本篇博文主要来对照一下这两种创建线程的差别。
继承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的更多相关文章
- 三、多线程之Thread与Runnable的区别
Thread与Runnable的区别(用三个窗口同时出售10张车票为例子) 运行代码 运行结果 分析 System.out.println("开始测试多线程");class MyT ...
- Java多线程之Thread、Runnable、Callable及线程池
一.多线程 线程是指进程中的一个执行流程,一个进程中可以有多个线程.如java.exe进程中可以运行很多线程.进程是运行中的程序,是内存等资源的集合,线程是属于某个进程的,进程中的多个线程共享进程中的 ...
- 慕课网_细说多线程之Thread VS Runnable
第1章 课前准备 1-1 前言 (00:49) 第2章 Thread VS Runnable 2-1 回顾线程创建的两种方式 (02:33) 继承Thread类 class MyThread exte ...
- 实现多线程的三种方法:Thread、Runnable和Callable
继承Thread类,重写run()方法 步骤: (1) 定义类继承Thread类 (2) 复写Thread类中的run方法. (3) 调用线程的start方法 (start方法有两种含义:1. 启动多 ...
- 细说多线程之Thread与Runnable
1:创建线程的两种方式: 继承Thread类 public class MyThread extends Thread { @Override public void run() { } } MyTh ...
- 细说多线程之Thread VS Runnable
[线程创建的两种方式] [线程的生命周期] ● 就绪:创建了线程对象后,调用了线程的start(). (注意:此时线程只是进入了线程队列,等待获取CPU服务,具备了运行的条件,但并不一定已经开始运行了 ...
- 多线程之thread和runnable
Runnanle方式可以避免Thread由于单继承特性带来的缺陷. Runnable代码可以被多个线程(thread实例)共享,适用于多个线程处理同一资源的情况. 线程的生命周期:创建,就绪,阻塞,运 ...
- Android线程之Thread 、Runnable 的两个例子
Thread例子: package fy.test; import android.app.Activity; import android.os.Bundle; import android.os. ...
- Java基础-进程与线程之Thread类详解
Java基础-进程与线程之Thread类详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.进程与线程的区别 简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程 ...
随机推荐
- knockoutjs 静动态数据、行为绑定,计算属性及Sync同步更新 Value值更新事件控制
data-bind="text: firstName"中data-bind属性是Knockout 用来显示关联UI和viewmodel的桥梁, text 表示把绑定的文本赋值给DO ...
- 2、JSP脚本
JSP脚本 JSP脚本包含了JSP表达式.声明标识和脚本程序.通过这些标识,在JSP页面中可以如同编写Java程序一样来声明变量.定义方法和执行各种表达式的运算 1.在JSP中应用代码片段 语法格式: ...
- HTTP 错误状态码讯息
HTTP 错误讯息解读 4xx: Client Error 使用者端(浏览器)错误讯息 错误码 错误讯息说明 400 Bad Request 错误的要求 401 Unauthorized ...
- Eclipse使用教程之精华篇
插件安装方法 插件大概有三种安装方法: 第一种:知道在线安装地址.Eclipse→Help→Install New Software...→地址栏(Work with)中输入安装地址→勾选要安装的插件 ...
- Java Socket网络编程Client端详解
此类实现客户端套接字(也可以就叫“套接字”).套接字是两台机器之间的通信端点. Socket client = new Socket(ip,port);//创建一个流套接字并将其连接到指定 IP 地址 ...
- js与php中一些相似函数的对比
一:substr js中:stringObject.substr(start,length) 一个中文算一个字符,一个英文也算一个字符 <script type="text/jav ...
- Atitit. 解决80端口 System 占用pid 4,,找到拉个程序或者服务占用http 80服务
Atitit. 解决80端口 System 占用pid 4,,找到拉个程序或者服务占用http服务 这个是http.sys系统服务占用了... net stop http ,三,没法儿终止 1. 寻 ...
- 李洪强iOS经典面试题37-解释垃圾回收的原理
李洪强iOS经典面试题37-解释垃圾回收的原理 问题 我们知道,Android 手机通常使用 Java 来开发,而 Java 是使用垃圾回收这种内存管理方式. 那么,ARC 和垃圾回收对比,有什么 ...
- MySQL编程API
1.MySQL API数据结构 MySQL API中用到了很多结构体类型,下面就简单说一下常用的结构体. MYSQL 连接数据库前,必须先创建MYSQL变量,此变量在很多MySQL API函数中会用到 ...
- activiti链接
工作流学习——重要概念扫盲篇一步曲 http://blog.csdn.NET/zwk626542417/article/details/46592471