1.Runnable和Thread之间的联系:
Thread类也是Runnable接口的子类。
2. 在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口.
Thread类是在java.lang包中定义的。一个类只要继承了Thread类同时覆写了本类中的run()方法就可以实现多线程操作了,但是一个类只能继承一个父类,这是此方法的局限
package com.liupan.thread;
public class MyThread extends Thread{
private String name;
public MyThread(String name) {
// TODO Auto-generated constructor stub
super();
this.name = name;
}
@Override
public void run() {
// TODO Auto-generated method stub
// super.run();
for(int i=0;i<10;i++){
System.out.println("线程开始:"+this.name+",i="+i);
}
}
}
package com.liupan.thread;
public class ThreadTestDemo {
public static void main(String[] args) {
MyThread mt1=new MyThread("线程a");
MyThread mt2=new MyThread("线程b");
// mt1.run();
// mt2.run();
mt1.start();
mt2.start();
}
}
上边的程序需要说明一点:
当调用mt1.run()函数时,会执行MyThread中的run()函数,执行完后继续执行mt2.run()函数,不会出现多线程的那种并发执行。
当调用mt1.start()函数时,会立即返回,继续执行mt2.start()函数,而此时会通过JVM调用相应的run()函数,出现多线程的并发执行。
Runnable接口
在实际开发中一个多线程的操作很少使用Thread类,而是通过Runnable接口完成。
package com.liupan.thread;
public class MyThread2 implements Runnable{
private String name;
public MyThread2(String name) {
// TODO Auto-generated constructor stub
this.name = name;
}
@Override
public void run() {
// TODO Auto-generated method stub
for(int i=0;i<10;i++){
System.out.println("线程开始:"+this.name+",i="+i);
}
}
}
但是在使用Runnable定义的子类中没有start()方法,只有Thread类中才有。此时观察Thread类,有一个构造方法:publicThread(Runnable targer)此构造方法接受Runnable的子类实例,也就是说可以通过Thread类来启动Runnable实现的多线程。(start()可以协调系统的资源):
package com.liupan.thread;
public class ThreadTestDemo {
public static void main(String[] args) {
MyThread2 mt11 = new MyThread2("线程aa");
MyThread2 mt22 = new MyThread2("线程bb");
new Thread(mt11).start();
new Thread(mt22).start();
}
}
3.两种实现方式的区别和联系:
在程序开发中只要是多线程肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下好处:
->避免点继承的局限,一个类可以继承多个接口。
->适合于资源的共享
//MyThread implements Runable
MyThread mt=new MyThread();
new Thread(mt).start();//同一个mt,但是在Thread中就不可以,如果用同一
new Thread(mt).start();//个实例化对象mt,就会出现异常
new Thread(mt).start();
实例化三个线程,但是使用同一个run()函数,所以相应的资源是共享的。
而继承自Thread的run()函数则不行
参考: http://blog.sina.com.cn/s/blog_8f5097be01011hbu.html