线程的 run() 和 start() 有什么区别?
线程的 run() 和 start() 有什么区别?
-
调用 start() 方法是用来启动线程的,轮到该线程执行时,会自动调用 run();直接调用 run() 方法,无法达到启动多线程的目的,相当于主线程线性执行 Thread 对象的 run() 方法。 一个线程对线的 start() 方法只能调用一次,多次调用会抛出 java.lang.IllegalThreadStateException 异常;run() 方法没有限制。
测试 run() 方法
public class TestThreadRunStart { public static void main(String[] args) { Thread t = new Thread(){ @Override public void run() { //休眠3秒 try { Thread.sleep(3000); System.out.println("休眠3秒"); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("Thread running..."); } }; testRun(t); // testStart(t); } private static void testRun(Thread t) { t.run(); //休眠1秒 try { Thread.sleep(1000); System.out.println("休眠1秒"); } catch (InterruptedException e) { e.printStackTrace(); } } private static void testStart(Thread t) { t.start(); //休眠1秒 try { Thread.sleep(1000); System.out.println("休眠1秒"); } catch (InterruptedException e) { e.printStackTrace(); } }
休眠3秒 Thread running... 休眠1秒
测试 start() 方法
public static void main(String[] args) { Thread t = new Thread(){ @Override public void run() { //休眠3秒 try { Thread.sleep(3000); System.out.println("休眠3秒"); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("Thread running..."); } }; // testRun(t); testStart(t); }
休眠1秒 休眠3秒 Thread running...
两次的执行结果,可以看出 run() 和 start() 方法的区别。
【Java面试题与答案】整理推荐
上一篇:
IDEA上Java项目控制台中文乱码