文:线程的 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() 方法 测试结果

在这里插入图片描述

最后:

不足之处,还望小伙伴多多谅解;
有错之处,还望小伙伴指出,小编会尽快改正

最新文章

  1. 微软KinectV2深度传感器在Ubuntu上的配置和使用
  2. Windows 7 Python 3.5 及 django 1.8 的安装
  3. Python_实现三级目录展示
  4. [windows API]获取当前系统图标,文字大小
  5. checkbox绿色圆圈样式
  6. Unity脚本在层级面板中的执行顺序测试1
  7. C# 开发BHO插件
  8. Hibernate 实体关联关系映射【转】
  9. procfs
  10. eclipse创建android项目失败的问题 [ android support library ]
  11. java SimpleDateFormat非线程安全测试
  12. 代码-Weka的NaiveBayes类
  13. Maven--生命周期和插件(四)
  14. 华为笔试题--LISP括号匹配 解析及源码实现
  15. nodejs 实现跨域
  16. [工作积累] TAA Ghosting 的相关问题
  17. MethodImplOptions.Synchronized的一点讨论
  18. 【TFS错误】TF30063: 您没有访问 Microsoft-IIS/8.5 的权限
  19. django_models后台管理myarya
  20. RobotFramework安装扩展库包autoitlibrary(四)

热门文章

  1. CodeForces - 262C 贪心
  2. 图论-欧拉图-欧拉回路-Euler-Fluery-Hierholzer-逐步插入回路法-DFS详解-并查集
  3. Java 四种权限修饰符
  4. js和jq的获取焦点失去焦点写法
  5. CSS颜色及文本字体
  6. 12_JavaScript基础入门(2)
  7. 【Kafka】Stream API
  8. HMM-前向后向算法理解与实现(python)
  9. 【Poj-3693】Maximum repetition substring 后缀数组 连续重复子串
  10. [hdu5256]LIS模型