浅谈Runnable和Thread的区别
来源:互联网 发布:阿里云青岛机房电话 编辑:程序博客网 时间:2024/06/08 12:04
在我们需要实现多线程的过程中,毫无例外会用到Thread和Runnable这两个类和接口,所以,我简单的对这两个类做了一下分析,与大家分享一下
首先说说他们的共同点:
1 他们都可以实现多线程的操作,
2 他们都需要实现run方法
不同点就是他们一个是接口,而另一个是类,我们在实现多线程的时候,由于子类继承父类只能继承一个,但是可以实现多个接口,而且也可以实现资源的共享,所以我们多数采用的是实现Runnable这个接口,但是他需要创建Tread对象的start()方法来开启线程,所以说,也是各有利弊 (Thread类继承自Runnable接口) 下面,通过一段代码看看他们的不同 1Runnable 需要创建Thread对象开启线程 public class Test implements Runnable{@Overridepublic void run() {System.out.println("我是runnable线程");}public static void main(String[] args) { Test t = new Test(); Thread thread = new Thread(t); thread.start(); }}2Thread可以直接开启线程
public class Test extends Thread{@Overridepublic void run() {System.out.println("我是thread线程");}public static void main(String[] args) { Test t = new Test(); t.start(); }}关于资源共享的问题
3实现Thread类
public class Test extends Thread{@Overridepublic void run() {for(int i=0;i<10;i++){System.out.println("我是thread线程"+i);}}public static void main(String[] args) { Test t1 = new Test(); Test t2 = new Test(); Test t3= new Test(); t1.start(); t2.start(); t3.start(); }}结果是(没有全部粘过来)
我是thread线程0我是thread线程1我是thread线程0我是thread线程0我是thread线程1我是thread线程2我是thread线程3我是thread线程4我是thread线程5我是thread线程6我是thread线程7我是thread线程8我是thread线程9我是thread线程1我是thread线程2我是thread线程3我是thread线程43实现Runnable接口
public class Test implements Runnable{@Overridepublic void run() {for(int i=0;i<10;i++){System.out.println("我是thread线程"+i);}}public static void main(String[] args) { Test t =new Test(); new Thread(t).start(); new Thread(t).start(); new Thread(t).start(); }}结果
我是thread线程0我是thread线程1我是thread线程2我是thread线程3我是thread线程4我是thread线程5我是thread线程6我是thread线程7我是thread线程8我是thread线程9我是thread线程0我是thread线程1我是thread线程2我是thread线程3我是thread线程4我是thread线程5我是thread线程0我是thread线程1我是thread线程2我是thread线程3我是thread线程4我是thread线程5我是thread线程6我是thread线程7我是thread线程8我是thread线程9我是thread线程6我是thread线程7我是thread线程8我是thread线程9显而易见的是在用Thread实现多线程的过程中,需要我们创建多个对象,但是在实现Runnable的过程中,只需要创建一个对象,由多个线程去共享其中的资源
最后,说个题外话,除了这两个方法实现多线程以外,还有一个Callable接口可以实现多线程,但是他实现的是call方法,而且他有返回值,并且可以抛出多个异常,自处理事件等许多亮点了,但是由于他的实现特别繁琐还有其它的种种原因,现在不是很常用,所以大家了解一下就可以了
0 0
- 浅谈Runnable和Thread的区别
- Runnable和Thread的区别
- Runnable 和 thread的区别
- Runnable和Thread的区别
- Thread和Runnable的区别
- Thread和Runnable的区别
- Runnable和Thread的区别
- Thread和Runnable的区别
- thread和runnable的区别
- Runnable和Thread的区别
- runnable和thread的区别
- thread 和runnable的区别
- Runnable和Thread的区别
- Thread 和 Runnable 的区别
- thread和runnable的区别
- Thread和Runnable的区别
- Thread 和runnable的区别
- Runnable和Thread的区别
- JDK动态代理生成.class文件和cglib动态代理生成.class文件
- leetCode练习(120)
- Windos上Eclipse连接外部Hadoop的HDFS时,拒绝连接解决方案
- 第九周项目3--稀疏矩阵的三元组表示的实现及应用1
- NOIP[2013] 华容道
- 浅谈Runnable和Thread的区别
- Android 实用技巧 --- 命令godir croot
- PetaPoco的使用Demo手册
- C++ 基本类型的转换和static_cast等
- 安卓之Intent
- 【Ubuntu14.04】【Spark】单机版搭建实录
- 第十周--建立二叉树算法库
- Hibernate中@Entity @Table(name="*",schema="*")的设置与应用
- JDK中的proxy动态代理