多线程——继承Thread 类和实现Runnable 接口的区别
来源:互联网 发布:淘宝开店需要保证金吗 编辑:程序博客网 时间:2024/05/17 18:28
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--得到的记过都是再上一个线程运行结果之上得到的。
1 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的区别
- poj3260&&hdu3591 多重背包+完全背包
- 1023. Have Fun with Numbers (20)
- 动态库的编写和使用
- POJ 3601 Tower of Hanoi
- Effecitive C++_Item20笔记
- 多线程——继承Thread 类和实现Runnable 接口的区别
- 公告
- JAVA ASCII码 读入字符串测试
- C与C++中的enum类型使用
- 在Ubuntu中安装Visual Studio Code
- Begin_With_AngularJS(1)基础:ng-app,ng-controller,代码分离,模板,作用域等
- 欧拉函数模板
- codeforces 589d(相遇问题)
- 分享| Go语言(golang)的认识,跟学习资料及其开发工具