关系:
Thread和Runnable的实质是继承关系,没有可比性。无论是使用Runnable还是Thread,都会new Thread,然后执行run方法。用法上,如果有复杂的线程操作需求,那就选择继承Thread,如果只是简单的执行一个任务,那就实现Runnable
点醒:
一开始看到许多大神说有区别,而且很大,但是看了一篇博主的内容,并亲自试验了一下,觉得讲的有点道理,在这里做个总结并且分享一下
在一些大神,up主上看到的总结:
Runnable更容易可以实现多个线程间的资源共享,而Thread不可以
其中的一个博主结论与地址:
Thread和Runnable的实质是继承关系,没有可比性
举个简单的例子:两个线程同时再抢5张票
使用Thread
public class Demo01 {
public static void main(String[] args) {
new MyThread().start();
new MyThread().start();
}
static class MyThread extends Thread {
private int ticket = 5;
@Override
public void run() {
while (true) {
System.out.println("Thread ticket = " + ticket--);
if (ticket < 0) {
break;
}
}
}
}
}
运行结果:
很明显总共5张票,怎么可能抢出10张呢???
使用Runnable
public class Demo02 {
public static void main(String[] args) {
MyThread2 mt = new MyThread2();
new Thread(mt).start();
new Thread(mt).start();
}
static class MyThread2 implements Runnable {
private int ticket = 5;
@Override
public void run() {
while (true) {
System.out.println("Thread ticket = " + ticket--);
if (ticket < 0) {
break;
}
}
}
}
}
运行结果:
这里虽然是一个抢出了5张票,但是并不是Runnable更容易可以实现多个线程间的资源共享,而Thread不可以
总结:
Thread和Runnable的实质是继承关系,没有可比性。无论使用Runnable还是Thread,都会new Thread,然后执行run方法。用法上,如果有复杂的线程操作需求,那就选择继承Thread,如果只是简单的执行一个任务,那就实现runnable。