一、run()方法
public void run()
/*
如果这个线程是使用单独的Runnable运行对象构造的,
则Runnable对象的run方法; 否则,此方法不执行任何操作并返回。
Thread的Thread应该覆盖此方法。
*/
举例
public class testRunAndStart {
public static void main(String[] args) {
Thread thread1=new Thread(new Runnable() {
@Override
public void run() {
try {
long start = System.currentTimeMillis();
Thread.sleep(1000);
long end = System.currentTimeMillis();
System.out.println("thread1执行,花费"+(end-start)/1000+"秒");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
Thread thread2=new Thread(new Runnable() {
@Override
public void run() {
System.out.println("thread2执行");
}
});
thread1.start();
thread2.start();
/*
运行结果:
thread2执行
thread1执行,花费1秒
*/
}
}
二、start()方法
public void start()
/*
导致此线程开始执行; Java虚拟机调用此线程的run方法。
结果是两个线程同时运行:当前线程(从调用返回到start方法)
和另一个线程(执行其run方法)。
不止一次启动线程是不合法的。 特别地,
一旦线程完成执行就可能不会重新启动。
*/
举例
public class testRunAndStart {
public static void main(String[] args) {
Thread thread1=new Thread(new Runnable() {
@Override
public void run() {
try {
long start = System.currentTimeMillis();
Thread.sleep(1000);
long end = System.currentTimeMillis();
System.out.println("thread1执行,花费"+(end-start)/1000+"秒");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
Thread thread2=new Thread(new Runnable() {
@Override
public void run() {
System.out.println("thread2执行");
}
});
thread1.start();
thread2.start();
/*
运行结果:
thread2执行
thread1执行,花费1秒
*/
}
}
三、run()和start()区别与联系
start()方法用于启动线程并使得线程处于就绪状态;run()方法用于执行线程的运行时代码(即run()方法相当于main线程下的普通方法,不是多线程的)。
分析:看run()和start()的简单举例会发现:
run()方法举例中,尽管thread1线程执行时会暂停1秒,但是它仍然在thread2之前运行,这就是因为调用run()方法只是看成main线程的一个普通函数,按照执行次序依次运行
start()方法举例中:因为thread1线程执行时会暂停1秒,所以thread2会优先执行完成。因为start()方法是多线程的。
satrt()方法只可以调用一次,run()方法可以调用多次。
start()方法会调用run()方法(start()方法会执行线程的准备工作,然后再执行run()方法)。
版权声明:本文为tangwang5346原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。