多线程编程(三)--创建线程之Thread VS Runnable

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

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

 

继承Thread类:

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

          

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

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


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

 

分析Thread类的源代码:

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

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

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

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

 

实现Runnable接口:

          

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

 

 

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

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

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

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

 

实现Runnable接口:

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

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

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

 

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


转载于:https://www.cnblogs.com/wzzkaifa/p/6754296.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/269561.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

wamp php imagick,如何在wamp for Windows中安装和启用Imagick扩展 php psd 生成缩略图

之所以写这篇文章就是希望后面的人少踩坑, 当时有个需求是psd生成缩略图网上相关的文章寥寥无几,然后很多文章都是缺胳膊缺腿,然后找了半天在国外找到一篇文章,不过这篇文章是xamp集成环境的 我是wamp集成环境 , 但是套…

用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变

使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变 答: 使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。 代码 public class TestFinal {private static final StringBuffer a new S…

Heap 3214 LIS题解

依据问题转换成最长不降子序列问题。 10^9的输入数据计算起来还是挺花时间的。由于这里仅仅能使用O(nlgn)时间复杂度了。只是证明是能够算出10^9个数据的。由于时间限制是5s. #include <stdio.h> #include <vector> #include <string.h> #include <algori…

给自己的Blog 上添加定制的搜索引擎

CNBlog.org 已经在心得集的右上角增加了一个搜索功能。输入一个关键字&#xff0c;然后进入后发现就是Google的搜索功能&#xff0c;不同的是在界面上有了一个定制的CNBlog.org 标志&#xff0c;而且能够选择站内搜索还是在网络上搜索。因为CNBlog.org 的新站点时间还不长&…

php获取网络文件的几种方式,PHP如何实现获取网络上的文件?

PHP可以获取网络上的文件吗&#xff1f;PHP如何实现获取网络上的文件&#xff1f;请看实例代码&#xff1a;//设置我们将要使用的文件$srcurl "http://localhost/index.php";$tempfilename "tempindex.html";$targetfilename "index.html";?…

Intellij IDEA中maven更新不下来pom中的jar包,reimport失效

问题&#xff1a; Intellij IDEA中使用maven reimport包&#xff0c;一直失败 即使我将本地已存在的一个jar包目录删除了&#xff0c;pom文件那里也没飘红提示找不到 解决方法&#xff1a; maven设置中去掉离线下载。 Work offline&#xff1a;勾选上时不会走maven远程仓…

Java+XML+MVC框架StrutsCX简介[转]

StrutsCX是一个以Struts为基础的XML解决方案的框架&#xff0c;和Struts不同&#xff0c;它使用XML&#xff08;确切的说是XSLT&#xff09;作为表现层&#xff0c;而不是像Struts那样是以JSP作为表现层。 目前它的最新版本是0.9.5&#xff0c;这个也就意味着它还没有完全稳定和…

oracle高资源消耗sql,Oracle中定位重要(消耗资源多)的SQL

在分析SQL性能的时候&#xff0c;经常需要确定资源消耗多的SQL&#xff0c;总结如下&#xff1a; 1 查看值得怀疑的SQLselect substr(to_char(s.pct,在分析SQL性能的时候&#xff0c;经常需要确定资源消耗多的SQL&#xff0c;&#xff0c;总结如下&#xff1a;1 查看值得怀疑的…

《Too Much Heaven》

我第一次听<Too Much Heaven>是在阿哲的《夜色》(The Color of the Night)专辑&#xff0c;这张英文专辑翻唱了很多名歌&#xff0c;包括著名的<Against All Odds>&#xff0c;当然这是我后来才知道的。 <Too Much Heaven>的原唱是Bee Gees&#xff0c;后来…

poj2109 Power of Cryptography(数学题)

题目链接&#xff1a;http://poj.org/problem?id2109 ---------------------------------------------------------------------------------------------------------------------------------------------------------- 欢迎光临天资小屋&#xff1a;http://user.qzone.qq.c…

@PostContruct注解的使用

PostConstruct是Java自己的注解. PostConstruct该注解被用来修饰一个非静态的void()方法. PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次. PostConstruct在构造函数之后执行,init()方法之前执行. 如果我们知道servlet的生命周期&#xff…

接oracle私活价格,也来记录一下第一次接私活的体验

来源所在部门领导答应另一个部门领导解决业务上的一些问题&#xff0c;刚好是我负责。由于各总原因&#xff0c;没过试用期&#xff0c;领导需要我离职了&#xff0c;跟另一个部门领导确认后&#xff0c;就在离职前 2 天加个班&#xff0c;交付了已经完成的部分。大概 2 个月后…

Plain text, flat file, 及flat-file database 如何翻译

经常遇到Plain text, flat file, 及flat-file database 这三个词&#xff0c;但不知翻译成什么样的中文好。请大家多指教。 英文意思我已经找到了&#xff1a; (1) plain text Refers to textual data in ASCII format. Plain text is the most portable format because it is …

《Vim实用技巧》阅读笔记 --- 移动及跳转

1、在对实际行的操作之前加上g&#xff0c;即可对屏幕行进行操作&#xff0c;例如&#xff1a;gj表示向下移动一个屏幕行&#xff0c;g^表示移动到屏幕行的第一个非空白字符等等 2、Vim有两组面向单词正向及反向移动的命令&#xff1a; w 正向移动到下一个单词的开头b 反向移动…

JAVA面试题------------final 关键字是干什么用的?谈谈你的理解。

final 是 Java 中的关键字&#xff0c;它表示的意思是不可变的&#xff0c;在 Java 中&#xff0c;final 主要用来&#xff1a; 修饰类&#xff0c;final 修饰的类不能被继承&#xff0c;不能被继承的意思就是不能使用 extends 来继承被 final 修饰的类&#xff1b; 修饰变量&…

oracle财务软件凭证打印,金算盘财务软件后台数据库为Oracle

金算盘财务软件后台数据库为Oracle&#xff0c;OA系统中虽然提供了金算盘财务软件的接口&#xff0c;但由于版本较低&#xff0c;无法直接采集金算盘财务软件的备份数据。我们发现&#xff0c;在已试验的金算盘财务软件的凭证表中&#xff0c;科目字段中既有科目编码也有科目名…

发布IP地址查询的WEB SERVICE

在值得期待的2005来临之际,发布IP地址查询WEB SERVICE,顺祝博客园的所有朋友们,新年快乐,新年好心情. http://IPLOOKUP.ASPSIR.COM 此外,WHOIS查询WEB SERVICE http://WHOIS.ASPSIR.COM 欢迎大家使用和发表建议

C#23种设计模式

创建型: 1. 单件模式(Singleton Pattern) 2. 抽象工厂&#xff08;Abstract Factory&#xff09; 3. 建造者模式(Builder) 4. 工厂方法模式&#xff08;Factory Method) 5. 原型模式(Prototype) 结构型: 6. 适配器模式&#xff08;Adapter Pattern) 7. 桥接模式&#xff08;Bri…

Unity GeometryShader(从一个线框渲染的例子开始)

GeometryShader这个概念&#xff0c;已经出现很久了&#xff0c;但由于性能不佳&#xff0c;所以使用的并不多。甚至移动平台根本就不支持。移动平台的硬件更新速度也是越来越快&#xff0c;GS的应用普及应该不会太远。就现阶段而言&#xff0c;GS来做一些辅助效果也是有一定用…