多线程——继承Thread 类和实现Runnable 接口的区别
来源:互联网 发布:2016年茶叶出口数据 编辑:程序博客网 时间:2024/05/18 19:40
java中我们想要实现多线程常用的有两种方法,继承Thread 类和实现Runnable 接口,有经验的程序员都会选择实现Runnable接口 ,其主要原因有以下两点:
首先,java只能单继承,因此如果是采用继承Thread的方法,那么在以后进行代码重构的时候可能会遇到问题,因为你无法继承别的类了。
其次,如果一个类继承Thread,则不适合资源共享。但是如果实现了Runable接口的话,则很容易的实现资源共享。
通过下面的实例可以清晰的看出两种方式的区别所在。
1.继承Thread 类
package test;/** * 继承thread类 * @author hongxin * */public class testThread extends Thread{private int count=5;private String name; public testThread(String name) { this.name=name; }public void run() { for (int i = 0; i < 5; i++) { System.out.println(name + "运行 count= " + count--); try { sleep((int) Math.random() * 10); } catch (InterruptedException e) { e.printStackTrace(); } } }}
package test;public class main1 {public static void main(String[] args) {testThread mTh1=new testThread("A");testThread mTh2=new testThread("B");mTh1.start();mTh2.start();}}
运行结果
代码分析
线程1和线程2之间的变量是不能共享的,每次count--都有各自的变量和结果。
2.Runnable 接口
package test;/** * 实现runnable接口 * @author hongxin * */public class testRunnable implements Runnable{ private int count=15;@Overridepublic void run() { for (int i = 0; i < 5; i++) { System.out.println(Thread.currentThread().getName() + "运行 count= " + count--); try { Thread.sleep((int) Math.random() * 10); } catch (InterruptedException e) { e.printStackTrace(); } }}}
package test;public class main2 {public static void main(String[] args) {testRunnable mTh = new testRunnable(); new Thread(mTh, "C").start();//同一个mTh,但是在Thread中就不可以,如果用同一个实例化对象mt,就会出现异常 new Thread(mTh, "D").start(); new Thread(mTh, "E").start();}}
运行结果
代码分析
三个不同的线程之间的变量是共享的,每次count--得到的记过都是再上一个线程运行结果之上得到的。
阅读全文
0 0
- 多线程——继承Thread 类和实现Runnable 接口的区别
- 多线程——继承Thread 类和实现Runnable 接口的区别
- 多线程——Java中继承Thread类与实现Runnable接口的区别
- 多线程中的继承Thread类和实现Runnable接口的区别
- Android---多线程:继承Thread 类和实现Runnable 接口的区别
- 继承Thread类和实现Runnable接口的区别。
- 继承Thread父类和实现Runnable接口的区别
- Java 继承Thread类和实现Runnable接口的区别
- Java 继承Thread类和实现Runnable接口的区别
- Java 多线程实现接口Runnable和继承Thread区别
- Java 多线程实现接口Runnable和继承Thread区别
- Java 多线程实现接口Runnable和继承Thread区别 (2
- Java 多线程实现接口Runnable和继承Thread区别
- 实现多线程时继承Thread和实现Runnable接口的区别和用法
- Java 继承Thread和实现Runnable实现多线程的区别
- 对于多线程类 实现Runnable接口和继承Thread类有什么区别
- 多线程:继承Thread和实现Runnable的区别
- 多线程继承Thread和实现runnable的区别
- C字符数组
- Electron如何调用NodeJS扩展模块
- List 和 Map 的遍历
- Python: strip() & split()
- acquia dev desktop开发第七天
- 多线程——继承Thread 类和实现Runnable 接口的区别
- 生产者消费者模型
- 串口之GetCommTimeouts、SetCommTimeouts函数详解
- 简述Spring说明文档的意义
- connect函数
- TIOBE2017榜单公布_PHP还会是世界上最好的语言吗?
- 欧姆龙PLC串口实验心得体会
- rxjava 实际应用(下)
- java 8(二)--函数式数据处理Stream