java中继承Thread 和实现Runnable的区别
来源:互联网 发布:smartwatch2软件下载 编辑:程序博客网 时间:2024/06/06 07:47
java中继承Thread和实现Runnable的区别
以前一直以为线程继承Thread 和实现Runnable的区别是一个可以资源共享一个不能资源共享。 然后写了段代码发现其实Thread也可以资源共享。
继承Thread
public class ThreadSaleSecond extends Thread{ public int i=100000; public void run(){ long start=System.currentTimeMillis(); while(i>0){ synchronized (this) {System.out.println(Thread.currentThread().getName()+"==="+i--); } } long end=System.currentTimeMillis(); System.out.println(end-start+"ms"); }} ThreadSaleSecond tss=new ThreadSaleSecond(); Thread t1=new Thread(tss); Thread t2=new Thread(tss); t1.start(); t2.start();
运行结果(只贴了部分):
Thread-2===5Thread-2===4Thread-2===3Thread-2===2Thread-2===1874msThread-1===0874ms
上面的时间为两个线程运行的时间 方便和Runnable进行对比
实现Runnable
public class ThreadSale implements Runnable { private int i=100000; public void run() { long start=System.currentTimeMillis(); while(i>0){ synchronized (this) {System.out.println(Thread.currentThread().getName()+"==="+i--); } } long end=System.currentTimeMillis(); System.out.println(end-start+"ms"); }} ThreadSale ts=new ThreadSale(); Thread t1=new Thread(ts); Thread t2=new Thread(ts); t1.start(); t2.start();
运行结果(只贴部分):
Thread-1===6Thread-1===5Thread-1===4Thread-1===3Thread-1===2Thread-1===1Thread-0===0905ms905ms
另一种就是Thread不共享资源
new ThreadSaleSecond().start();new ThreadSaleSecond().start();
结果:
Thread-0===10Thread-1===10Thread-0===9Thread-0===8Thread-0===7Thread-0===6Thread-0===5Thread-0===4Thread-0===3Thread-0===2Thread-1===9Thread-1===8Thread-1===7Thread-1===6Thread-1===5Thread-1===4Thread-1===3Thread-1===2Thread-1===1Thread-0===1
然后你会发现,两个都可以实现资源共享。用了10万条记录进行测试,而且时间都差不多。
深究其原因 发现其实Thread也实现了Runnable接口,也是可以实现资源共享的。Runnable这个接口中只有个run方法,而Thread中有很多方法。
1.Runnable解决了单继承的局限性
2.引用API中说的一段话: 通过实例化某个 Thread 实例并将自身作为运行目标,就可以运行实现 Runnable 的类而无需创建 Thread 的子类。
3.大多数情况下,如果只想重写 run() 方法,而不重写其他 Thread 方法,那么应使用 Runnable 接口。
自己的理解 如有问题请留言指出。
阅读全文
0 0
- java中继承Thread和实现Runnable的区别
- java中继承Thread 和实现Runnable的区别
- Java 继承Thread和实现Runnable实现多线程的区别
- java 继承Thread和实现Runnable的区别
- Java 继承Thread类和实现Runnable接口的区别
- Java 继承Thread类和实现Runnable接口的区别
- 继承thread和实现runnable的区别
- Java中Runnable和Thread的区别
- Java中Runnable和Thread的区别
- java中thread和runnable的区别
- Java中Runnable和Thread的区别
- Java中Runnable和Thread的区别
- Java中Runnable和Thread的区别
- Java中Runnable和Thread的区别
- Java中Runnable和Thread的区别
- Java中Runnable和Thread的区别
- Java中Runnable和Thread的区别
- Java中Runnable和Thread的区别
- Nginx:配置指南
- 国内/外电话号码验证
- htons()函数
- js获取上一页、当前页及域名url方法,JS反回上一页的方法
- python 类学习
- java中继承Thread 和实现Runnable的区别
- redis Error: Connection reset by peer 解决
- groovy switch
- PAT乙级1002
- python 导入自定义包 包机制
- 广播接收器向Activity传送数据
- 1004. Counting Leaves (30)(PAT甲)
- JS与面向对象
- 如何优雅地使用Sublime Text3