一、继承Thread类
子类需要重写Thread中的run方法
代码详解如下:
1.定义一个类,继承Thread,并重写run方法
public class TestThread extends Thread{ //继承Thread类
public void run(){ //重写run方法
for(int i=0;i<10;i++){
System.out.println("TestThread:"+i);
}
}
}
2.写一个测试方法,启用线程
public class Test1 {
public static void main(String args[]){
TestThread tt=new TestThread();//new对象
t.start(); //调用start方法,执行TestThread类中的run方法
for(int i=0;i<10;i++){
System.out.println("TestMain1 :"+i);
}
}
}
二、实现Runnable接口
实现接口的方式必须new一个Thread对象,在调用start方法
1.定义一个类,实现Runnable接口,并重写run方法
public class TestRunnable implements Runnable{ //实现Runnable接口
public void run(){ //重写run方法
for(int i=0;i<10;i++){
System.out.println("TestRunnable:"+i);
}
}
}
2.写一个测试方法,启用线程
public class Test2 {
public static void main(String args[]){
TestRunnable tr = new TestRunnable (); //实例化TestThread类
Thread t = new Thread(tr); //启动一个新的线程,必须new一个Thread对象出来
t.start();//启动新开辟的线程,执行的是新线程(TestThread 类)的run()方法,新线程与主线程会一起并行执行
for(int i=0;i<10;i++){
System.out.println("TestMain2 :"+i);
}
}
}
注:若不实例化Thread对象,直接调用TestThread run方法,是方法的调用,执行完run方法在执行注函数的方法,是单线程。
例:
public class Test {
public static void main(String args[]){
TestThread tt = new TestThread (); //实例化TestThread类
tt.run();//方法的调用
for(int i=0;i<10;i++){
System.out.println("TestMain :"+i);
}
}
}
总结:在创建多线程的时候,应该优先选择实现Runnable接口这种方式去开辟一个新的线程。因为接口的实现可以实现多个,而类的继承只能是单继承。因此在开辟新线程时能够使用Runnable接口就尽量不要使用从Thread类继承的方式来开辟新的线程。