Thread类的核心功能是进行线程的启动,但是如果一个类直接继承Thread类,就会造成单继承的局限。Java中有提供老人另一种实现模式:Runnable接口。该接口中只有一个run方法。这一点和Thread类是一致的。
范例:使用Runnable定义线程主体类
class RunThread implements Runnable{
private String title;
public RunThread(String title) {
this.title = title;
}
@Override
public void run() {
for(int i=0;i<10;i++){
System.out.println("My thread title="+title+"i="+i);
}
}
}
但是,新的问题产生了。实现Runnable接口后,虽然实现了run方法,凡是没有课start方法。此时,就需要我们关注Thread的构造方法。 publiv Thread(Runnable target),说明该构造函数可以使用Thread的构造方法进行实现线程启动。
class RunThread implements Runnable{
private String title;
public RunThread(String title) {
this.title = title;
}
@Override
public void run() {
for(int i=0;i<10;i++){
System.out.println("My thread title="+title+"i="+i);
}
}
}
public class RunnableDemo {
public static void main(String args[]){
RunThread myThread1 = new RunThread("thread1");
new Thread(myThread1).start();
RunThread myThread2 = new RunThread("thread1");
new Thread(myThread2).start();
RunThread myThread3 = new RunThread("thread1");
new Thread(myThread3).start();
}
}
由于这样的编码方式显得太繁琐,而Runnable写那么多纯粹就实现了一个线程主体类的对象而已。因此,可以使用匿名内部类的方法进行实现。
/**
* Created by liyubo on 2017/9/23.
* 使用匿名内部类实现Runnable接口
*/
public class RunThreadDemo2 {
public static void main(String args[]){
new Thread(new Runnable() {
private String title;
@Override
public void run() {
for(int i=0;i<10;i++)
System.out.println("i="+i);
}
}).start();
}
}