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

小敏纸 小敏纸 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
看了文章: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接口可以实现多继承啥的,大家认为呢?
...全文

相关推荐

详解Java中Thread 和Runnable区别

详解Java中Thread和Runnable区别Java中Thread和Runnable是两个不同的概念,它们都是Java中的线程机制,但是它们之间有着本质的区别。

weixin_38698539

Java中Runnable和Thread的区别

在我们开发的过程中常常会碰到多线程的问题,对于多线程的实现方式主要有两种:实现Runnable接口、继承Thread类。对于这两种多线程的实现方式也是有着一些差异。既然实现了多线程那必然离不开管理这些线程,当问题比简单时一个或者几个线程就OK了,也涉及不到效率问题。一旦线程数量多起来的时候,必然躲不过这些线程的创建与销毁,而往往这是很浪费时间的。这时就需要利用线程池来进行管理,既免去了我们创建线程...

同名公众号 - 人生代码

Java中继承thread类与实现Runnable接口的比较

比较继承 Thread 类和实现 Runnable 接口都是 Java 中创建线程的方式,但它们之间有着一些区别。继承 Thread 类简单易用,但它有单继承机制的限制。

weixin_38562130

JAVA中使用Thread类和Runnable接口创建多线程

在Java中创建线程有两种方法:使用Thread类和使用Runnable接口。在使用Runnable接口时需要建立一个Thread实例。因此,无论是通过Thread类还是Runnable接口建立线程,

水滴石穿2015

java实现多线程的两种方式继承Thread类和实现Runnable接口的方法

### 实现Runnable接口如果你的类已经继承了另一个类(Java不支持多重继承),则可以选择实现`Runnable`接口。

weixin_38532139
评论 4
收藏 已收藏
分享
返回顶部
小敏纸
Java 51,407 成员 86,126 内容