线程的 run() 和 start() ; 太骚了 ~~
文:线程的 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() ; 太骚了 ~~的更多相关文章
- 除了信号触发线程与接收者线程相同的情况能直接调用到slot,其它情况都依赖事件机制(解决上面代码收不到信号的问题其实很简单,在线程的run();函数中添加一个事件循环就可以了,即加入一句exec();),信号槽不就是一个回调函数嘛
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { pThreadCon = new CSerialThread ...
- 线程的 run()和 start()有什么区别?(未完成)
线程的 run()和 start()有什么区别?(未完成)
- 线程的run( ) 和 start( ) 区别
Run() : run()就是个普通方法,可以调用执行,但是是同步调用,没有异步的效果. Run()方法就是个普通方法,可以调用多次 Start(): 通知线程规划期,此线程已经准备就绪,等待调用 ...
- Java线程中run和start方法的区别
http://bbs.csdn.net/topics/350206340 Thread类中run()和start()方法的区别如下:run()方法:在本线程内调用该Runnable对象的run()方法 ...
- Java线程池队列吃的太饱,撑着了咋整?java 队列过大导致内存溢出
Java的Executors框架提供的定长线程池内部默认使用LinkedBlockingQueue作为任务的容器,这个队列是没有限定大小的,可以无限向里面submit任务. 当线程池处理的太慢的时候, ...
- 太骚了,用Excel玩机器学习
最近发现了一个好玩的Python库,它可以将训练好的机器学习模型转换为Java.C.JavaScript.Go.Ruby,VBA 本地代码,可以让连Python和机器学习一无所知的同学也能感受预测的神 ...
- 追踪app崩溃率、事件响应链、Run Loop、线程和进程、数据表的优化、动画库、Restful架构、SDWebImage的原理
1.如何追踪app崩溃率,如何解决线上闪退 当 iOS设备上的App应用闪退时,操作系统会生成一个crash日志,保存在设备上.crash日志上有很多有用的信息,比如每个正在执行线程的完整堆栈 跟踪信 ...
- java多线程(1)---线程创建、start、run
线程创建.start.run 一.创建线程方式 java创建线程的方式,主要有三种:类Thread.接口Runnable.接口Callable. 1.Thread和Runnable进行比较 他们之间的 ...
- 0040 Java学习笔记-多线程-线程run()方法中的异常
run()与异常 不管是Threade还是Runnable的run()方法都没有定义抛出异常,也就是说一条线程内部发生的checked异常,必须也只能在内部用try-catch处理掉,不能往外抛,因为 ...
随机推荐
- Linux 开发之线程条件锁那些事
2019独角兽企业重金招聘Python工程师标准>>> 条件锁即在一定条件下触发,那什么时候适合用条件锁呢,那当然是你在等待一个符合的条件下触发.一个常用的例子就是在线程中无限循环执 ...
- 使用cpplint检测代码规范
0. cpplint - python脚本, google使用它作为自己的C++代码规范检查工具: 1. 安装 方法一: $sudo apt-get install python-pip $pip i ...
- 最长递增子序列(Longest increasing subsequence)
问题定义: 给定一个长度为N的数组A,找出一个最长的单调递增子序列(不要求连续). 这道题共3种解法. 1. 动态规划 动态规划的核心是状态的定义和状态转移方程.定义lis(i),表示前i个数中以A[ ...
- Course Selection System ZOJ - 3956 01背包+思维
Course Selection System ZOJ - 3956 这个题目居然是一个01背包,我觉得好难想啊,根本就没有想到. 这个题目把题目给的转化为 ans = a*a-a*b-b*b 这个 ...
- 一篇博客带你轻松应对java面试中的多线程与高并发
1. Java线程的创建方式 (1)继承thread类 thread类本质是实现了runnable接口的一个实例,代表线程的一个实例.启动线程的方式start方法.start是一个本地方法,执行后,执 ...
- Cookie什么?Cookie和Session防御怎么做?
Cookie什么?Cookie和Session防御怎么做? Cookie的概念 Cookie,复数形态Cookies,中文名称为小型文本文件.指某些网站为了辨别用户身份.进行session跟踪而储存在 ...
- 【Spark】RDD(Resilient Distributed Dataset)究竟是什么?
目录 基本概念 官方文档 概述 含义 RDD出现的原因 五大属性 以单词统计为例,一张图熟悉RDD当中的五大属性 解构图 RDD弹性 RDD特点 分区 只读 依赖 缓存 checkpoint 基本概念 ...
- python重试次数装饰器
目录 重试次数装饰器 重试次数装饰器 前言, 最近在使用tornado框架写Restful API时遇到很多的问题. 有框架的问题, 有异步的问题. 虽然tornado 被公认为当前python语言最 ...
- 设计模式之GOF23中介者模式
中介者模式Mediator 场景:公司中各个部门需要交互,通过中介总经理进行交互 核心: 如果一个系统中对象之间的联系成网状结构,对象之间多对多,将导致关系极其复杂,这些对象统称为“同事关系” 我们可 ...
- [hdu3484]枚举
题意:给两个个01矩阵,有两种操作,(1)交换两列(2)反转某一行.求能否通过若干操作使两矩阵相等 思路:(把所有对B的操作放到A上来,这一定是可以做到一样的效果的)枚举B矩阵的第一列对应A矩阵的第几 ...