创建对线程的第二种方式_实现Runnable接口、Thread和Runnable的区别
创建对线程的第二种方式_实现Runnable接口
Runnable接口应该由那些打通过某一线程执行其实列的类在实现,类必须定义一个称为run发无参方法
Thread (Runnable target)分配新的对象 Thread对象
Thread (Runnable target,String name)分配新的Thread对象
实现步骤:
创建一个Runnable接口实现类
在实现类中重写Runnable接口的中的Run方法,设置线程任务
创建一个Runnable接口实现对象
创建Thread类对象,构造方法中传递Runnbable接口的实现类对象
调用Thread类中start方法,并开启新的线程run方法
案例:
package Runnable;
public class Runnableimpl implements Runnable{
@Override
public void run() {
for (int i = 0; i < 20; i++) {
System.out.println(Thread.currentThread().getName()+i);
}
}
public static void main(String[] args) {
Runnableimpl runnableimpl = new Runnableimpl();
Thread thread = new Thread(runnableimpl);
thread.start();
for (int i = 0; i < 20; i++) {
System.out.println(Thread.currentThread().getName()+i);
}
}
}
看结果:
Thread和Runnable的区别
实现Runnleb实现多线程的好处:
1.避免了单继承的局限性
一个类只能继承一个类,类继承了Thread类就不能继承其他的类
实现Runnable接口,还可以继承其他的类,实现其他的接口
2.增强了程序的扩展性,降低了程序的耦合性(解耦)
实现Runnlab接口的方式,把设置线程任务和开启新线程进行了分离(解耦)
实现类中,重写了run方法,用来设置线程任务
创建Thread类对象,调用start方法;用来开启线程
案例:
public class Runnableimpl2 implements Runnable{
@Override
public void run() {
for (int i = 0; i < 20; i++) {
System.out.println(Thread.currentThread().getName()+i);
}
}
public static void main(String[] args) {
Runnableimpl2 runnableimpl = new Runnableimpl2();
Thread thread = new Thread(runnableimpl);
thread.start();
for (int i = 0; i < 20; i++) {
System.out.println("hello");
}
}
}