RunnableDemo 类实现了Runnable接口,所以重写run方法,但是直接调用run方法,并不会启动一个新的线程。
因为Runnable接口中并没有start()方法,所以必须借助一个线程对象的start()方法,才会启动一个新的线程。
所以,在创建Thread对象的时候,把RunnableDemo 当前对象作为构造方法的参数传递进去,这个线程启动的时候,就会去执行run()方法了。
public class RunnableDemo implements Runnable {
private Thread t;
private String threadName;
public RunnableDemo(String name) {
threadName = name;
System.out.println("Creating " + threadName);
}
@Override
public void run() {
System.out.println("Running " + threadName );
try {
for (int i = 10; i > 0; i--) {
System.out.println("Thread: " + threadName + ", " + i);
Thread.sleep(1000);
}
} catch (InterruptedException e) {
System.out.println("Thread " + threadName + " interrupted.");
}
System.out.println("Thread " + threadName + " exiting.");
}
public void start(){
System.out.println("Starting " + threadName );
if(t==null){
t = new Thread(this,threadName);
t.start();
}
}
}
public class TestThread {
public static void main(String[] args){
RunnableDemo R1 = new RunnableDemo("Thread-1");
R1.start();
RunnableDemo R2 = new RunnableDemo("Thread-2");
R2.start();
}
}