我们知道,Java中是不允许多重继承的,有的类需要继承某些特性,同时也需要创建多线程。这样,就不能同时继承Thread类了。为了应对这种情况,java中可以运用Runnable接口来创建多线程,其语法如下:
class 类名称 implements Runnable{
属性;
方法;
修饰符 run(){
以线程处理的程序;
}
}
我的理解是,线程就好像是一个容器,容器里面是对象,对象里面有run方法。这是一个3重的包含的关系。启动的是线程,而通过接口实现的对象,是线程的参数。线程最终运行的是对象的run方法,即实际的运行代码,以线程来处理的程序。
如果是以线程对象来启动的线程,则省略了一层,直接把run方法在线程这个容器里面执行起来就行了。当然,是通过start方法。而不是run方法,直接通过run方法也能执行相应的代码,但是线程却没有启动。这是有概念上的区别的。下面的代码展示了通过接口创建的多线程:
class newThread implements Runnable{ //使用接口实现一个拥有run方法的对象
public void run(){ //覆盖run方法,写入要用线程处理的代码
for(int i=1;i<=5;i++)
System.out.println("This is a new thread.");
}
}
public class demoThread{ //测试类
public static void main(String[] args){
newThread n = new newThread(); //创建实现了线程的接口的对象
new Thread(n).start(); //将此对象作为参数,来创建thread对象,并使用start方法启动此线程
for(int i=1;i<=5;i++) //测试类的静态主方法内的执行语句
System.out.println("This is the original thread.");
}
}
下面来编译执行
可以看到,两个线程是交替执行的。并非顺序执行。充分证明了start方法启动了线程。