cas 1:
package threadTest; public class ThreadTest {
public static void main(String[] args) {
Thread t = new Thread(new Thread3()
);
t.run();
t.run();
t.start();
}
} class Thread3 implements Runnable { @Override
public void run() {
System.out.println("RUNNING");
}
}
输入结果:
RUNNING
RUNNING
RUNNING
线程的start方法是将线程提交给操作系统,然后该线程进入Runnable状态,等待系统分配时间片,然后线程执行(run方法执行)
run方法:Thread类中的run方法继承自Runnable接口
t为Thread实例,t.run()执行的是Thread类中的run( )方法,该run( )方法继承自Runnable接口,Thread3类重写了Runnable的run方法,t又通过Thread类创建,
因此,t.run()执行的是Thread3类重写的run()方法,主线程中普通的方法调用;t.start()开启t线程,执行run()方法
case 2:
package threadTest; public class ThreadTest {
public static void main(String[] args) {
Thread t = new Thread() {
public void run() {
pong();//通过匿名内部类创建线程对象,重写run方法,该语句不会有输出
}
};
t.run();
System.out.println("Ping");
} protected static void pong() {
System.out.println("Pong");
}
}
t.run();直接调用重写的run方法,而不是开启线程。
由以上两个案例说明:
- 线程的开启,需要用线程实例调用start()方法
- t.run()也能执行重写的run()方法,但不是开启线程,只是普通的方法调用