Java 继承Thread类和实现Runnable接口的区别
来源:互联网 发布:数据库毕业论文题目 编辑:程序博客网 时间:2024/05/21 10:16
java中线程的创建有两种方式
1. 通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中;
2. 通过实现Runnable接口,实例化Thread类;
继承Thread类:
public class TestThreadDemo extends Thread { int num = 3; public TestThreadDemo(String ThreadName) { super(ThreadName); } @Override public void run() { for (int i = 0; i < 10; i++) if (num > 0) { System.out.println(Thread.currentThread().getName() + "--->" + num--); } } public static void main(String[] args) { new TestThreadDemo("线程一").start(); new TestThreadDemo("线程二").start(); new TestThreadDemo("线程三").start(); }}
输出的结果:
通过实现Runnable接口
public class TestRunnable implements Runnable { int num = 3; public TestRunnable() { } @Override public void run() { for (int i = 0; i < 10; i++) if (num > 0) { System.out.println(Thread.currentThread().getName() + "--->" + num--); } } public static void main(String[] args) { TestRunnable tr = new TestRunnable(); new Thread(tr, "线程一").start(); new Thread(tr, "线程二").start(); new Thread(tr, "线程三").start(); }}
输出的结果:
我们会发现两种实现线程的方式输出的结果不同,为什么会出现这种情况呢?我们可以这样思考一下:new TestThreadDemo()创建了三个对象时同时创建了三个线程,每个线程都有一个run()方法执行任务;第二种方法是三个线程共同的执行一个run()方法去执行任务,至于我输出的都是线程一,这个话可能是在抢CPU资源时,被线程一抢到了。至于线程二和线程三在执行的过程中,没有抢到资源。
在我们刚接触的时候可能会迷糊继承Thread类和实现Runnable接口实现多线程,其实在接触后我们会发现这完全是两个不同的实现多线程,一个是多个线程分别完成自己的任务,一个是多个线程共同完成一个任务。
其实在实现一个任务用多个线程来做也可以用继承Thread类来实现只是比较麻烦,一般我们用实现Runnable接口来实现,简洁明了。
大多数情况下,如果只想重写 run() 方法,而不重写其他 Thread 方法,那么应使用 Runnable 接口。这很重要,因为除非程序员打算修改或增强类的基本行为,否则不应为该类(Thread)创建子类。
0 0
- Java 继承Thread类和实现Runnable接口的区别
- Java 继承Thread类和实现Runnable接口的区别
- 继承Thread类和实现Runnable接口的区别。
- 继承Thread父类和实现Runnable接口的区别
- Java 多线程实现接口Runnable和继承Thread区别
- Java 多线程实现接口Runnable和继承Thread区别
- Java 多线程实现接口Runnable和继承Thread区别 (2
- Java 多线程实现接口Runnable和继承Thread区别
- 实现Runnable接口和继承Thread类区别
- Java 继承Thread和实现Runnable实现多线程的区别
- Java线程示例 - 继承Thread类和实现Runnable接口
- Java中继承thread类与实现Runnable接口的区别(实现线程)
- Java中实现多线程有两种方法的区别:继承Thread类、实现Runnable接口
- Java多线程实现接口Runnable和继承Thread区别(建议使用Runnable)
- 线程实现方式-继承Thread类和实现Runnable接口的区别
- java 继承Thread和实现Runnable的区别
- java中继承Thread和实现Runnable的区别
- java中继承Thread 和实现Runnable的区别
- hadoop之HDFS的扩充
- js实现删除文章弹窗提示是否确认
- [生存志] 第61节 孔子五期弟子
- 懒人第一篇
- code review基础方案
- Java 继承Thread类和实现Runnable接口的区别
- 簇表BSEG及其子表
- 矩阵快速幂
- 事件绑定on和addEventListener的区别
- 在Myeclipse中,编写strut.xml文件时自动提示设置
- 【物联网(IoT)开发】物联网及NodeRed 技术讲解及动手实践活动分享
- 左旋转字符串
- 数据结构实验之查找六:顺序查找
- 进程通信总结