请问启动线程是start()还是run()方法,能谈谈吗?
应聘者:start()方法
当用start()开始一个线程后,线程就进入就绪状态,使线程所代表的虚拟处理机处于可运行 状态,这意味着它可以由JVM调度并执行。但是这并不意味着线程就会立即运行。只有当cpu 分配时间片时,这个线程获得时间片时,才开始执行run()方法。 start()是方法,它调用run() 方法.而run()方法是你必须重写的.run()方法中包含的是线程的主体(真正的逻辑)„
继承Thread类的启动方式
public class ThreadTest {
public static void main(String[] args) {
MyThread t =new MyThread();
t.start();
}
}
class MyThread extends Thread{
@Override
public void run() {
System.out.Println("Hello World!");
}
}
实现Runnable接口的启动方式
public class ThreadTest {
public static void main(String[] args) {
Thread t = new Thread (new MyRunnable());
t.start();
}
}
class MyRunnable implements Runnable{
@Override
public void run() {
System.out.println("Hello World!");
}
}
实际上这两种启动线程的方式原理是一样的。首先都是调用本地方法启动一个线程,其次是在 这个线程里执行目标对象的run()方法。那么这个目标对象是什么呢?为了弄明白这个问题, 我们来看看Thread类的run()方法的实现:
public void run() {
if (target != null) {
target.run();
}
}
Was this helpful?
0 / 0