实现多线程的两种方式
- 继承Theard
新建一个类继承Theard类,重构run方法,开启run方法。public class MyThread extends Thread { @Override public void run() { System.out.println("线程名为:"+Thread.currentThread().getName()); for (int i = 0; i <20 ; i++) { System.out.println("线程任务"+i); } } public class Demo02Thread { public static void main(String[] args) { MyThread my=new MyThread(); my.start(); for (int i = 0; i < 60; i++) { System.out.println("main"+i); } }
}
- 实现Runnable接口
创建一个Runnable的实现类,重写里面的run方法,创建一个Runnable接口的实现类对象,创建一个Thread对象,构造方法中传递Runnable接口的实现类对象,调用Thread的start方法,开启新的run方法。
public class RunnableImpI implements Runnable {
@Override
public void run() {
for (int i = 0; i <20 ; i++) {
System.out.println("线程任务2");
}
}
}
public class Demo03Runnable {
public static void main(String[] args) {
RunnableImpI run =new RunnableImpI();
Thread thread=new Thread(run);
thread.start();
for (int i = 1; i <20 ; i++) {
System.out.println(Thread.currentThread().getName());
}
}
}
基于上面两种实现方式,可以采用匿名内部内+上述两种方式实现多线程。
public static void main(String[] args) {
new Thread(){
@Override
public void run() {
for (int i = 0; i <20 ; i++) {
System.out.println(Thread.currentThread().getName()+"----->1");
}
}
}.start();
Runnable runnable = new Runnable(){
@Override
public void run() {
for (int i = 0; i <20 ; i++) {
System.out.println(Thread.currentThread().getName()+"---->2");
}
}
};
new Thread(runnable).start();
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i <20 ; i++) {
System.out.println(Thread.currentThread().getName()+"---->3");
}
}
}).start();
}
继承Thread类和实现Runnable有什么区别?
使用接口可以让自己编写的类可以更加灵活,不在趋于单继承的方式。