一个类只要继承了 Thread 类同时覆写了本类中的 run()方法就可以实现多线程操作了,但是一个类只能继承一个父类,而实现 Runnable 不受这个的约束 。
Thread
例子 1:
public class demo {
public static void main(String[] args){
ThreadDemo d1 = new ThreadDemo("syy");
ThreadDemo d2 = new ThreadDemo("qb");
d1.start();
d2.start();
}
}
class ThreadDemo extends Thread {
private String name;
ThreadDemo(String name){
this.name = name;
}
public void run(){
for(int x=1;x<10;x++)
System.out.println(Thread.currentThread().getName()+" "+name +"===="+x);
}
}
此时输出的结果可能为线程 0、1 的来回切换
如果调用 d1.run()来"启动"线程,发现并没有来回切换。启用多线程时我们使用 start()方法,在 JDK 的文档中可以发现,一旦调用 start()方法,则会通过 JVM 找到 run()方法。
public class Thread extends Object implements Runnable
发现 Thread 类也是 Runnable 接口的子类。
*是重写 run 方法
Runnable
例 2:
public class demo
{
public static void main(String[] args){
RunnableDemo r1 =new RunnableDemo("syy");
RunnableDemo r2 = new RunnableDemo("q");
new Thread(r1).start();
new Thread(r2).start();
}
}
class RunnableDemo implements Runnable {
private String name;
RunnableDemo(String name){
this.name = name;
}
public void run() {
// TODO Auto-generated method stub
for(int x=1;x<10;x++)
System.out.println(Thread.currentThread().getName()+" "+name +"===="+x);
}
}
实现效果与例 1 相同。
使用 Runnable 定义的子类中没有 start()方法通过 Thread 类来启动 Runnable 实现的多线程.
Runnabe 的好处:
- 避免点继承的局限,一个类可以继承多个接口。
- 适合于资源的共享
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于