一、常见的两种方法
1.定义一个线程类,它继承类Thread并重写其中的run方法
- 定义一个类继承Thread类
public class MyThread1 extends Thread{
public void run()
{
方法体1;
}
}
- 调用自定义Thread对象
public static void main(String [] args){
MyThread m1=new MyThread1("thread1");
MyThread m2=new MyThread1("thread2");
MyThread m3=new MyThread1("thread3");
m1.start();
m2.start();
m3.start();
}
2.通过实现Runnable接口来创建多线程
- 定义一个类实现Runnable接口
public class MyThread2 implements Runnable {
public void run() {
方法体2;
}
- 调用自定义Thread对象
public static void main(String [] args){
MyThread m1=new MyThread1("thread1");
MyThread m2=new MyThread1("thread2");
MyThread m3=new MyThread1("thread3");
m1.start();
m2.start();
m3.start();
}
注:其中方法体1,2中均为线程要实现的操作代码
二、两种方法的比较
第一种方式,继承Thread类,类仅支持单继承,也就是说,当定义一个新的类的时候,它只能扩展一个外部类.这样,如果创建自定义线程类的时候是通过扩展 Thread类的方法来实现的,那么这个自定义类就不能再去扩展其他的类,也就无法实现更加复杂的功能。同时线程任务和线程对象绑定在一起,耦合性(紧密联系程度)高。不便于维护。
第二种方式,实现Runnable接口,线程任 务在实现Runnable接口的类中,线程对象是Thread类对象,线程任务和线程对象相分离,耦合性底,便于维护,可拓展性高。