Java中Runnable和Thread的区别
1、在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口;
Thread类是在java.lang包中定义的。一个类只要继承了Thread类同时覆写了本类中的run()方法就可以实现多线程操作了,但是一个类只能继承一个父类。这也是此方法的局限。
2、继承Thread实现的模式是 定义多个线程,各自完成各自的任务.
实现Runnable实现的模式是 定义多个线程,实现一个任务.
3、在程序开发中只要是多线程肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下好处:
避免点继承的局限,一个类可以继承多个接口。
适合于资源的共享
thread是类,runnable是接口,都可以是多线程,
但是在创建多线程的方法中我们可以有2种方法
class MyThread extends Thread{
public void run(){
System.out.println("this is thread");
}
}
class MyRunnable implements Runnable{
public void run(){
System.out.println("this is runnable");
}
}
在实际使用中我们推荐使用runnable方法
因为如果使用thread的话就不能继承其他类(ps:一个类只能继承一个父类)
但是runnable就不同(一个类可以实现多个接口)
以上是我的理解
以下是一篇简单的介绍,我翻过来给你看下。
在 Java 语言中,我们都知道有俩种方式可以创建一个线程。
继承 Thread 类 。
实现 Runnable 接口 。
代码如下:
//new Thread(new MyWork()).start();
public class MyWork implements Runnable {
public void run() {
// your work here ...
}
}
//Thread.start();
public class MyThread extends Thread {
public MyThread() {
super("MyThread");
}
public void run() {
// your work here ...
}
}
这俩的区别讨论很多。我总结了大概有以下几点。
实现 Runnable 大多数情况下是比继承 Thread 更好的方法。
Java 只支持单继承,所以你继承了 Thread 的话,其他的类你就不能继承了。
如果实现 Runnable 接口,多线程可以直接将你的工作并发处理(直接使用 start)。而继承 Thread 不能直接进行多线程工作,你得为你的每一部分工作都定义一个线程。
其他的一些API,接口都是 Runnable 类型的。比如 Java 内置的线程池 API ExcutorService 等。
其实 Thread 只是实现 Runnable 接口,并增加了一些常用方法而已。不信你看源码。
public
class Thread implements Runnable {
/* Make sure registerNatives is the first thing <clinit> does. */
private static native void registerNatives();
static {
registerNatives();
}
...
2015-03-09 · 知道合伙人软件行家
我们普通的RUN方法如果没有执行完是不会返回的,也就是会一直执行下去,这样RUN方法下面的方法就不可能会执行了,可是线程里的RUN方法却不一样,它只有一定的CPU时间,执行过后就给别的线程了,这样反复的把CPU的时间切来切去,因为切换的速度很快,所以我们就感觉是很多线程在同时运行一样.
你简单的调用run方法是没有这样效果的,所以你必须调用Thread类的start方法来启动你的线程.所以你启动线程有两种方法
一是写一个类继承自Thread类,然后重写里面的run方法,用start方法启动线程
二是写一个类实现Runnable接口,实现里面的run方法,用new Thread(Runnable target).start()方法来启动
这两种方法都必须实现RUN方法,这样线程起动的时候,线程管理器好去调用你的RUN方法.
在程序开发中只要是多线程肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下好处:
避免点继承的局限,一个类可以继承多个接口。
适合于资源的共享