Runable接口创建线程
声明实现Runable接口的类。该类然后实现run方法。然后可以分配该类的实例,在创建Thread时作为一个参数来传递并启动
Thread(Runnable target)分配新的Thread对象
Thread(Runnable target,String name)分配新的Thread对象
Runnable 接口应该由那些打算通过某一线程执行其实例的类来实现。类必须定义一个称为 run 的无参数方法。
演示:
接口实现类:
public class MyThread2 implements Runnable{
@Override
public void run() {
System.out.println("我是Runnable方式实现的多线程");
}
}
main:
/*实现步骤
1、创建一个Runnable接口的实现类
2、在实现类中重写Runnable接口的run方法,设置线程任务
3、创建一个Runnable接口的实现类对象
4、创建Thread类对象,构造方法中传递Runnable接口的实现类对象
5、调用Thread类中的start方法,开启新的线程执行run方法*/
public static void main(String[] args) {
MyThread2 myThread2=new MyThread2();
Thread thread=new Thread(myThread2);
thread.start();
}
与第一种方式创建多线程程序的区别:
使用Runnable接口创建多线程程序的好处:
1、避免了单继承的局限性
一个类只能继承一个类
2、增强了程序的扩展性,降低了程序的耦合性
实现Runnable的方式,把设置线程任务和开启新线程进行了分离
实现类中,重写了run方法:用来设置线程任务
创建Thread类对象,调用start方法:用来开启新线程
也就是可以使用同一个Thread对象传入不同的Runnable实现类对象就可以执行不同的多线程
匿名内部类方式实现线程的创建
上代码:
public static void main(String[] args) {
//继承Thread的方式
new Thread(){
@Override
public void run() {
for (int i=0;i<10;i++)
System.out.println("继承Thread的多线程实现"+i);
}
}.start();
//Runnable接口的方式
new Thread(new Runnable() {
@Override
public void run() {
for (int i=0;i<10;i++)
System.out.println("匿名内部类接口的多线程实现"+i);
}
}).start();
for (int i=0;i<10;i++)
System.out.println("我是主线程"+i);
}