标签:thread
在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口;Thread类是在java.lang包中定义的。一个类只要继承了Thread类同时覆写了本类中的run()
方法就可以实现多线程操作了,但是一个类只能继承一个父类,这是此方法的局限。
在程序开发中只要是多线程肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下好处:
1、避免点继承的局限,一个类可以继承多个接口。2、适合于资源的共享
以上为在其他博客上看到的观点,还有一篇专门文章讲“Runnable可以实现资源共享但Thread不能实现资源共享的原因”,这是链接,但是如果换另一种思路看起来也是可以实现Thread资源共享的,不知对不对…
上代码:
一个继承自Thread类:
package com.zz.bridge; /** * 扩展自Thread类 * Copyright 2015年6月13日 * created by txxs * all right reserved */ public class ThreadDemo0 extends Thread { private int ticket = 5; public void run(){ for(int i =0;i<500;i++){ if(this.ticket>0){ System.out.println(Thread.currentThread().getName()+"卖票---->"+(this.ticket--)); } } } }
package com.zz.bridge; /** * 实现Runnable接口 * Copyright 2015年6月13日 * created by txxs * all right reserved */ public class ThreadDemo1 implements Runnable { private int ticket =5; @Override public void run(){ for(int i =0;i<500;i++){ if(this.ticket>0){ System.out.println(Thread.currentThread().getName()+"卖票---->"+(this.ticket--)); } } } }
ThreadDemo0的测试类:
package com.zz.bridge; /** * 测试继承自Thread类 * Copyright 2015年6月14日 * created by txxs * all right reserved */ public class ThreadTest2 { public static void main(String[] args) { /** * 之前的博客(http://blog.chinaunix.net/uid-20665441-id-310538.html)说, * 继承Thread类的实例,用同一个实例化对象就会异常,不明白,亲自试了一下 * 发现这两种方式都可以实现线程共享,不明白为什么大家都说不可以 */ ThreadDemo0 ticketThread0 = new ThreadDemo0(); Thread th4 = new Thread(ticketThread0); //线程一 th4.setName("售票口10"); Thread th5 = new Thread(ticketThread0); //线程二 th5.setName("售票口11"); Thread th6 = new Thread(ticketThread0); //线程三 th6.setName("售票口12"); th4.start(); th5.start(); th6.start(); } }
ThreadDemo1的测试类:
package com.zz.bridge; /** * 实现Runnable接口 * Copyright 2015年6月14日 * created by txxs * all right reserved */ public class ThreadTest1 { public static void main(String[] args) { ThreadDemo1 ticketThread1 = new ThreadDemo1(); Thread th1 = new Thread(ticketThread1); //线程一 th1.setName("售票口7"); Thread th2 = new Thread(ticketThread1); //线程二 th2.setName("售票口8"); Thread th3 = new Thread(ticketThread1); //线程三 th3.setName("售票口9"); th1.start(); th2.start(); th3.start(); } }
从以上的运行结果可以看出,继承Thread和实现Runnable都实现了资源共享,但是为什么大家都认为这种方式不可以呢,还是我实现的方式有问题?
标签:thread
原文地址:http://blog.csdn.net/maoyeqiu/article/details/46493305