JAVA多线程之Runnable和Thread比较
来源:互联网 发布:java句柄是什么意思 编辑:程序博客网 时间:2024/06/06 07:41
在我们开发的过程中常常会碰到多线程的问题,对于多线程的实现方式主要有两种:实现Runnable接口、继承Thread类。对于这两种多线程的实现方式也是有着一些差异。既然实现了多线程那必然离不开管理这些线程,当问题比简单时一个或者几个线程就OK了,也涉及不到效率问题。一旦线程数量多起来的时候,必然躲不过这些线程的创建与销毁,而往往这是很浪费时间的。这时就需要利用线程池来进行管理,既免去了我们创建线程和销毁线程的代码,也提高了程序的效率。下面针对以上问题做出相关讲解。
一、Runnable、Thread比较
首先阐述实现Runnable的好处:
- java不允许多继承,因此实现了Runnable接口的类可以再继承其他类。
- 方便资源共享,即可以共享一个对象实例???(从很多博客中看到这样描述,但是此处有疑问,例子如下)
下面来通过具体代码来解释上述优点,网上很流行的买票系统,假设有10张票,首先通Thread来进行购买。代码如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
输出:
线程1卖票—->10
线程1卖票—->9
线程1卖票—->8
线程2卖票—->7
线程2卖票—->6
线程1卖票—->5
线程1卖票—->4
线程2卖票—->3
线程2卖票—->2
线程1卖票—->1
实现Runnable接口:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
输出:
线程1卖票—->10
线程1卖票—->9
线程1卖票—->8
线程1卖票—->7
线程2卖票—->6
线程2卖票—->5
线程2卖票—->4
线程2卖票—->3
线程2卖票—->2
线程2卖票—->1
从这两个例子可以看出,Thread也可以资源共享啊,为什么呢,因为Thread本来就是实现了Runnable,包含Runnable的功能是很正常的啊!!至于两者的真正区别最主要的就是一个是继承,一个是实现;其他还有一些面向对象的思想,Runnable就相当于一个作业,而Thread才是真正的处理线程,我们需要的只是定义这个作业,然后将作业交给线程去处理,这样就达到了松耦合,也符合面向对象里面组合的使用,另外也节省了函数开销,继承Thread的同时,不仅拥有了作业的方法run(),还继承了其他所有的方法。综合来看,用Runnable比Thread好的多。
针对本例再补充一点,在以上程序中,如果去掉同步代码块,则会出现其中一人购买第0张票的情况,所以我们在做多线程并行的时候一定要时刻考虑到边界值的问题,在关键代码处必须要做好同步处理
- JAVA多线程之Runnable和Thread比较
- JAVA多线程之Runnable和Thread比较
- JAVA多线程之Thread&&Runnable
- java多线程 Thread 和Runnable
- java多线程 Thread 和Runnable
- java多线程Thread和Runnable
- Java多线程--Runnable和Thread
- Java -- Thread 和 Runnable 多线程
- Java 中多线程的实现方法之Thread和Runnable
- Java多线程编程之Thread和Runnable的区别
- Java多线程编程之Runnable、Thread简介
- Java多线程之 Thread VS Runnable
- JAVA多线程之Thread VS Runnable
- Java多线程 之 Runnable Thread (一)
- JAVA多线程:Thread、Runnable
- java 多线程 Thread和Runnable的区别
- java多线程 Runnable和Thread区别
- 关乎Java多线程+Runnable和Thread…
- FMDB的基本使用
- return,break,continue三者区别
- MFC自绘进度条
- 各个JSON技术的比较
- Shadowsocks 一键安装脚本(四合一)
- JAVA多线程之Runnable和Thread比较
- 关于响应式布局css的部分知识点
- Hive编程(十二)【开发】
- getopt(分析命令行参数
- 深入理解计算机系统原书第2版
- 一位资深程序员大牛给予Java初学者的学习路线建议
- iOS SDK API
- 联想G480 win10系统的电脑开启虚拟机bios设置
- 批处理命令实现批量创建快捷方式