Java Thread类和Runnable接口的区别,网上说的都不对

lanxuezaipiao 2013-09-24 09:29:54
看了文章:http://mars914.iteye.com/blog/1508429和http://developer.51cto.com/art/201203/321042.htm,按照上面的程序运行了下,发现它们说的都不对,比如售票的程序:
package thread;

public class MyThread extends Thread {

private int tickets = 10;

@Override
public void run() {
for (int i = 0; i < 500; i++) {
if (this.tickets > 0) {
System.out.println(Thread.currentThread().getName() + "卖票---->"
+ (this.tickets--));
}
}
}

/**
* @param args
*/
public static void main(String[] args) {

MyThread mt = new MyThread();
Thread t1 = new Thread(mt, "一号窗口");
Thread t2 = new Thread(mt, "二号窗口");
Thread t3 = new Thread(mt, "三号窗口");

t1.start();
t2.start();
t3.start();
}

}

运行结果变化很大,比如如下:
一号窗口卖票---->10
一号窗口卖票---->7
一号窗口卖票---->6
一号窗口卖票---->5
一号窗口卖票---->4
一号窗口卖票---->3
一号窗口卖票---->2
一号窗口卖票---->1
三号窗口卖票---->8
二号窗口卖票---->9

而下面的代码:
package thread;

public class MyThread1 extends Thread {

private int tickets = 10;
private String name;

public MyThread1(String name) {
this.name = name;
}

@Override
public void run() {
for (int i = 0; i < 500; i++) {
if (this.tickets > 0) {
System.out.println(this.name + "卖票---->" + (this.tickets--));
}
}
}

/**
* @param args
*/
public static void main(String[] args) {
MyThread1 mt1 = new MyThread1("一号窗口");
MyThread1 mt2 = new MyThread1("二号窗口");
MyThread1 mt3 = new MyThread1("三号窗口");
mt1.start();
mt2.start();
mt3.start();
}

}


运行结果却是:
二号窗口卖票---->10
二号窗口卖票---->9
二号窗口卖票---->8
二号窗口卖票---->7
二号窗口卖票---->6
二号窗口卖票---->5
二号窗口卖票---->4
二号窗口卖票---->3
二号窗口卖票---->2
二号窗口卖票---->1
一号窗口卖票---->10
一号窗口卖票---->9
一号窗口卖票---->8
一号窗口卖票---->7
一号窗口卖票---->6
一号窗口卖票---->5
一号窗口卖票---->4
一号窗口卖票---->3
一号窗口卖票---->2
一号窗口卖票---->1
三号窗口卖票---->10
三号窗口卖票---->9
三号窗口卖票---->8
三号窗口卖票---->7
三号窗口卖票---->6
三号窗口卖票---->5
三号窗口卖票---->4
三号窗口卖票---->3
三号窗口卖票---->2
三号窗口卖票---->1

对于Runnable接口同样是上述情况,没有任何区别,而网上都说Runnable接口可以实现资源共享而Thread类不能实现资源共享,我感觉完全是胡扯,我觉得两者的区别只有一个:继承和接口的区别,Runnable接口可以实现多继承啥的,大家认为呢?
...全文
198 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
小敏纸 2013-09-24
  • 打赏
  • 举报
回复
是的,两者的区别应该就是继承和接口的区别,另外都推荐使用Runnable接口,不仅是其可以实现多继承应该内部实现机制方法也有些许区别吧,没研究
coooliang 2013-09-24
  • 打赏
  • 举报
回复
继承线程类和
coooliang 2013-09-24
  • 打赏
  • 举报
回复
...... 资源共享那是线程的并发。继续线程类和实现Runnable都只是创建线程的方法。和资源共享没有任何关系。
breaking236 2013-09-24
  • 打赏
  • 举报
回复
本来就是,这是线程的两种平行的实现方式,没有共享不共享的问题

50,528

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧