JAVA—创建线程的两种方式和两种方式的区别:
1.继承Thread类
main方法:
public class Demo01 {
public static void main(String[] args) {
MyThread mt = new MyThread(); //创建对象
mt.start(); //开启线程
for (int i = 0; i < 20; i++) {
System.out.println("main:" + i);
}
}
}
MyThread方法
public class MyThread extends Thread {
@Override
public void run() {
for (int i = 0; i < 20; i++) {
System.out.println("run:" + i);
}
}
}
2.实现Runnable接口:
main方法:
public class Demo {
public static void main(String[] args) {
MyRunnableImp mri = new MyRunnableImp(); //创建实现类对象
Thread t = new Thread(mri); //将实现类对象作为参数传给Thread对象
t.start(); //开启线程
for (int i = 0; i < 100; i++) {
System.out.println("我是主线程");
}
}
}
实现类方法:
public class MyRunnableImp implements Runnable {
@Override
public void run() { //重写run方法
for (int i = 100; i > 0; i--) {
System.out.println("我是子线程");
}
}
}
继承Thread类和实现Runnable接口两种方式的区别:
实现Runnable的区别:
1.避免了单继承的局限性
一个类只能继承一个类,类继承了Thread类,就不能继承其他类
实现Runnable接口,还可以继承其他的类,实现替他接口
2.增强了程序的扩展性,降低了程序的耦合性(解耦)
实现Runnable接口的方式,把设置线程任务和开启新线程进行了分离(解耦)
实现类中,重新run方法用来设置线程任务,
创建Thread对象,调用start方法用来开启新线程