线程的 run() 和 start() ; 太骚了 ~~
CodeCow 人气:0文:线程的 run() 和 start() ; 太骚了 ~~
注:本文转载于:CodeCow · 程序牛 的个人博客:http://www.codecow.cn/
《 似水流年,什么都会变,什么又都不会变 ——勿忘初心,继续前行 》
继上一篇 "头发都白了,才知道如何实现多线程 ",有小伙伴私聊小编,线程的 run()
和 start()
有什么 区别
,空闲之余,写下此文
前言
上篇文章《头发都白了,才知道如何实现多线程》小编用多线程方式实现了 边撸代码
边 看岛国大片
,但却遗留了一个问题,run() 和 start()到底有什么区别?
回顾Thread
回顾Thread的API public void start() :导致此线程开始执行; Java虚拟机调用此线程的run方法。 public void run() :此线程要执行的任务在此处定义代码。
run() 和 start() 区别
区别: 1、调用 start() 方法是用来启动线程的,轮到该线程执行时,会自动调用 run() 2、直接调用 run() 方法,无法达到启动多线程的目的,相当于主线程线性执行 Thread 对象的 run() 方法 3、一个线程对应的 start() 方法只能调用一次,多次调用会抛出 java.lang.IllegalThreadStateException 异常;run() 方法没有限制 看不懂没事,小编给你整个小总结 1、run()相当于线程的任务处理逻辑的入口方法 2、而start()的作用是启动相应的线程
测试start() 方法 上代码
public class TestThreadByStart { public static void main(String[] args) { Thread thread = new Thread() { @Override public void run() { try { Thread.sleep(3000); //休眠3秒 System.out.println("休眠3秒"); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("Thread running:我还是从前那个少年 "); } }; testStart(thread); } private static void testStart(Thread thread) { thread.start(); //调用 start()方法来启动线程,轮到该线程执行时,会自动调用 run() try { Thread.sleep(1000); //休眠1秒 System.out.println("休眠1秒"); } catch (InterruptedException e) { e.printStackTrace(); } } }
start() 方法 测试结果
在这里插入图片描述
测试run() 方法 上代码
public class TestThreadByRun { public static void main(String[] args) { Thread thread = new Thread() { @Override public void run() { try { Thread.sleep(3000); //休眠3秒 System.out.println("休眠3秒"); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("Thread running:我还是从前那个少年 "); } }; testRun(thread); } private static void testRun(Thread thread) { thread.run(); //直接调用 run() 方法,相当于主线程线性执行 Thread 对象的 run() 方法 //休眠1秒 try { Thread.sleep(1000); System.out.println("休眠1秒"); } catch (InterruptedException e) { e.printStackTrace(); } } }
run() 方法 测试结果
在这里插入图片描述
最后:
不足之处,还望小伙伴多多谅解;
有错之处,还望小伙伴指出,小编会尽快改正
加载全部内容