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

在这里插入图片描述

最后:

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

线程的 run() 和 start() ; 太骚了 ~~的更多相关文章

  1. 除了信号触发线程与接收者线程相同的情况能直接调用到slot,其它情况都依赖事件机制(解决上面代码收不到信号的问题其实很简单,在线程的run();函数中添加一个事件循环就可以了,即加入一句exec();),信号槽不就是一个回调函数嘛

    MainWindow::MainWindow(QWidget *parent) :   QMainWindow(parent)   {   pThreadCon = new CSerialThread ...

  2. 线程的 run()和 start()有什么区别?(未完成)

    线程的 run()和 start()有什么区别?(未完成)

  3. 线程的run( ) 和 start( ) 区别

    Run() :  run()就是个普通方法,可以调用执行,但是是同步调用,没有异步的效果. Run()方法就是个普通方法,可以调用多次 Start():  通知线程规划期,此线程已经准备就绪,等待调用 ...

  4. Java线程中run和start方法的区别

    http://bbs.csdn.net/topics/350206340 Thread类中run()和start()方法的区别如下:run()方法:在本线程内调用该Runnable对象的run()方法 ...

  5. Java线程池队列吃的太饱,撑着了咋整?java 队列过大导致内存溢出

    Java的Executors框架提供的定长线程池内部默认使用LinkedBlockingQueue作为任务的容器,这个队列是没有限定大小的,可以无限向里面submit任务. 当线程池处理的太慢的时候, ...

  6. 太骚了,用Excel玩机器学习

    最近发现了一个好玩的Python库,它可以将训练好的机器学习模型转换为Java.C.JavaScript.Go.Ruby,VBA 本地代码,可以让连Python和机器学习一无所知的同学也能感受预测的神 ...

  7. 追踪app崩溃率、事件响应链、Run Loop、线程和进程、数据表的优化、动画库、Restful架构、SDWebImage的原理

    1.如何追踪app崩溃率,如何解决线上闪退 当 iOS设备上的App应用闪退时,操作系统会生成一个crash日志,保存在设备上.crash日志上有很多有用的信息,比如每个正在执行线程的完整堆栈 跟踪信 ...

  8. java多线程(1)---线程创建、start、run

    线程创建.start.run 一.创建线程方式 java创建线程的方式,主要有三种:类Thread.接口Runnable.接口Callable. 1.Thread和Runnable进行比较 他们之间的 ...

  9. 0040 Java学习笔记-多线程-线程run()方法中的异常

    run()与异常 不管是Threade还是Runnable的run()方法都没有定义抛出异常,也就是说一条线程内部发生的checked异常,必须也只能在内部用try-catch处理掉,不能往外抛,因为 ...

随机推荐

  1. Netflix:当你按下“播放”的时候发生了什么?

    从用户端来看,使用Netflix是很简单的,按下播放键之后视频就像变魔术一样完美呈现了.看起来很容易是吧?然而实际不是这样的.了解过云计算的人可能会简单地以为,既然Netflix使用AWS来提供视频服 ...

  2. Nginx SSL/HTTPS 配置

    使用OpenSSL生成证书 1.生成RSA密钥的方法 openssl genrsa -des3 -out privkey.pem 2048 这个命令会生成一个2048位的密钥,同时有一个des3方法加 ...

  3. 一只简单的网络爬虫(基于linux C/C++)————开篇

    最近学习开发linux下的爬虫,主要是参考了该博客及其他一些网上的资料.网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息 ...

  4. [Linux] Hexo 搭建个人博客

    不做笔记出了bug就得重新再看一遍视频 视频来源: https://www.bilibili.com/video/BV1Yb411a7ty?t=75 安装 先安装 nodejs,npm, git 安装 ...

  5. README.md编写

    一.标题写法: 第一种方法: 1.在文本下面加上 等于号 = ,那么上方的文本就变成了大标题.等于号的个数无限制,但一定要大于0个哦.. 2.在文本下面加上 下划线 - ,那么上方的文本就变成了中标题 ...

  6. 【Elasticsearch学习】文档搜索全过程

    在ES执行分布式搜索时,分布式搜索操作需要分散到所有相关分片,若一个索引有3个主分片,每个主分片有一个副本分片,那么搜索请求会在这6个分片中随机选择3个分片,这3个分片有可能是主分片也可能是副本分片, ...

  7. P2220 [HAOI2012]容易题(快速幂)

    Describe 为了使得大家高兴,小Q特意出个自认为的简单题(easy)来满足大家,这道简单题是描述如下: 有一个数列A已知对于所有的A[i]都是1~n的自然数,并且知道对于一些A[i]不能取哪些值 ...

  8. python 基础应用4

    1.列表所有元素全部单独输出 #所有元素全部单独输出 li = [1,2,3,'taibai',[4,5,6,'taibaia']] for i in li: if type(i) == list: ...

  9. about VennsBlog.

    此博客主要将用于记录自己学习路上的一些点滴及心得 同时,也希望各位提出指正 相互交流,共同进步 感谢相遇

  10. box-sizing 可以使border padding不影响设置的盒子尺寸