通过继承Thread类,对run方法的重写实现多线程
public class ThreadTest extends Thread {
@Override
public void run() {
for(int i =0;i<20;i++){
System.out.println("一边听歌");
}
}
}
在主线程中调用父类start方法开启线程
public class ThreadTest extends Thread {
@Override
public void run() {
for(int i =0;i<20;i++){
System.out.println("一边听歌");
}
}
public static void main(String[] args) {
ThreadTest threadTest = new ThreadTest();
threadTest.start();//使用父类的start方法开启线程
for(int i =0;i<20;i++){
System.out.println("一边工作");
}
}
}
可以在输出中看到,输出的二十次听歌和二十次工作是交叉出现的,两个线程互不干扰。
注意,如果单独调用run方法,只是使用了一次普通方法,并没有开启线程
由于Java的单继承,因此通过继承Thread方法来实现多线程有其局限性,我们也可以通过实现Runnable接口来完成上述工作。事实上Thread类内部也是对Runnable接口的实现。
class ThreadFromRunnable implements Runnable{
@Override
public void run() {
for(int i =0;i<20;i++){
System.out.println("一边听歌");
}
}
}
在主线程中,我们不能直接使用该类,而是通过参数的方式创建Thread类
public static void main(String[] args) {
ThreadFromRunnable threadTest = new ThreadFromRunnable();
//通过创建Thread类来调用
new Thread(threadTest).start();
for(int i =0;i<20;i++){
System.out.println("一边工作");
}
}
该方法与第一种方式效果相同。