java学习之- 创建线程run和start特点
标签(空格分隔): run,start
为什么做run方法的覆盖?
1.Thread类用于描述线程,该类就定义一个功能用于存储线程要运行的代码,该存储功能就是run方法;
也就是说Thread种的run方法,用于存储线程要运行的代码.
2.复写run方法的目的:将代码存储在run方法,让线程运行;
- 问题:
如下例子我们不调用start而是调用run方法会有什么不同?
class Demo extends Thread{
public void run(){//将运行的代码放在run方法中
for(int x=0;x<60;x++) {
System.out.println("demo run-----"+x);
}
}
}
class ThreadDemo{
public static void main(String[] args){
Demo d= new Demo();//创建好一个线程
d.run();
for(int x=0;x<60;x++){
System.out.println("helloworld!----"+x);
}
}
}
执行结果:
demo run-----0
demo run-----1
demo run-----2
demo run-----3
demo run-----4
demo run-----5
demo run-----6
demo run-----7
demo run-----8
demo run-----9
demo run-----10
demo run-----11
demo run-----12
demo run-----13
demo run-----14
demo run-----15
demo run-----16
demo run-----17
demo run-----18
demo run-----19
demo run-----20
demo run-----21
demo run-----22
demo run-----23
demo run-----24
demo run-----25
demo run-----26
demo run-----27
demo run-----28
demo run-----29
demo run-----30
demo run-----31
demo run-----32
demo run-----33
demo run-----34
demo run-----35
demo run-----36
demo run-----37
demo run-----38
demo run-----39
demo run-----40
demo run-----41
demo run-----42
demo run-----43
demo run-----44
demo run-----45
demo run-----46
demo run-----47
demo run-----48
demo run-----49
demo run-----50
demo run-----51
demo run-----52
demo run-----53
demo run-----54
demo run-----55
demo run-----56
demo run-----57
demo run-----58
demo run-----59
helloworld!----0
helloworld!----1
helloworld!----2
helloworld!----3
helloworld!----4
helloworld!----5
helloworld!----6
helloworld!----7
helloworld!----8
helloworld!----9
helloworld!----10
helloworld!----11
helloworld!----12
helloworld!----13
helloworld!----14
helloworld!----15
helloworld!----16
helloworld!----17
helloworld!----18
helloworld!----19
helloworld!----20
helloworld!----21
helloworld!----22
helloworld!----23
helloworld!----24
helloworld!----25
helloworld!----26
helloworld!----27
helloworld!----28
helloworld!----29
helloworld!----30
helloworld!----31
helloworld!----32
helloworld!----33
helloworld!----34
helloworld!----35
helloworld!----36
helloworld!----37
helloworld!----38
helloworld!----39
helloworld!----40
helloworld!----41
helloworld!----42
helloworld!----43
helloworld!----44
helloworld!----45
helloworld!----46
helloworld!----47
helloworld!----48
helloworld!----49
helloworld!----50
helloworld!----51
helloworld!----52
helloworld!----53
helloworld!----54
helloworld!----55
helloworld!----56
helloworld!----57
helloworld!----58
helloworld!----59
- 无论运行多少遍都是这样的,
上述的执行的条线就是和一般的程序一样了,run仅仅是对象调用,单线程程序而start是开启线程并执行该线程的run方法;
- 以上问题大家会在面试中经常被问到:调用start和调用run方法的区别:
这里:run方法是普通的单线程序,无论程序运行多少遍执行的结果都是一样的;
而start的方法:是开启线程并执行该线程的run方法,多线程,每次运行的结果都不一样;
练习:创建两个线程和主线程交替运行:
class Demo extends Thread{
private String name;
Demo(String name){
this.name=name;
}
public void run(){//将运行的代码放在run方法中
for(int x=0;x<60;x++) {
System.out.println(name+"demo run-----"+x);
}
}
}
class ThreadDemo{
public static void main(String[] args){
Demo d1= new Demo("one");//创建好一个线程
Demo d2= new Demo("two");
d1.start();
d2.start();
for(int x=0;x<60;x++){
System.out.println("helloworld!----"+x);
}
}
}
执行结果:
onedemo run-----0
onedemo run-----1
onedemo run-----2
onedemo run-----3
onedemo run-----4
onedemo run-----5
onedemo run-----6
onedemo run-----7
onedemo run-----8
onedemo run-----9
onedemo run-----10
onedemo run-----11
onedemo run-----12
onedemo run-----13
onedemo run-----14
onedemo run-----15
onedemo run-----16
onedemo run-----17
onedemo run-----18
onedemo run-----19
onedemo run-----20
onedemo run-----21
onedemo run-----22
onedemo run-----23
onedemo run-----24
onedemo run-----25
onedemo run-----26
onedemo run-----27
onedemo run-----28
twodemo run-----0
twodemo run-----1
twodemo run-----2
twodemo run-----3
twodemo run-----4
twodemo run-----5
twodemo run-----6
twodemo run-----7
twodemo run-----8
twodemo run-----9
onedemo run-----29
twodemo run-----10
twodemo run-----11
twodemo run-----12
twodemo run-----13
twodemo run-----14
twodemo run-----15
twodemo run-----16
twodemo run-----17
twodemo run-----18
twodemo run-----19
twodemo run-----20
twodemo run-----21
twodemo run-----22
twodemo run-----23
twodemo run-----24
twodemo run-----25
twodemo run-----26
twodemo run-----27
twodemo run-----28
twodemo run-----29
twodemo run-----30
twodemo run-----31
twodemo run-----32
twodemo run-----33
twodemo run-----34
twodemo run-----35
twodemo run-----36
twodemo run-----37
twodemo run-----38
twodemo run-----39
twodemo run-----40
twodemo run-----41
twodemo run-----42
twodemo run-----43
twodemo run-----44
twodemo run-----45
twodemo run-----46
twodemo run-----47
twodemo run-----48
twodemo run-----49
twodemo run-----50
twodemo run-----51
twodemo run-----52
twodemo run-----53
twodemo run-----54
helloworld!----0
twodemo run-----55
onedemo run-----30
twodemo run-----56
twodemo run-----57
twodemo run-----58
twodemo run-----59
helloworld!----1
onedemo run-----31
onedemo run-----32
onedemo run-----33
onedemo run-----34
onedemo run-----35
onedemo run-----36
onedemo run-----37
onedemo run-----38
onedemo run-----39
onedemo run-----40
onedemo run-----41
onedemo run-----42
onedemo run-----43
onedemo run-----44
onedemo run-----45
onedemo run-----46
onedemo run-----47
onedemo run-----48
onedemo run-----49
onedemo run-----50
onedemo run-----51
onedemo run-----52
onedemo run-----53
onedemo run-----54
onedemo run-----55
onedemo run-----56
onedemo run-----57
onedemo run-----58
onedemo run-----59
helloworld!----2
helloworld!----3
helloworld!----4
helloworld!----5
helloworld!----6
helloworld!----7
helloworld!----8
helloworld!----9
helloworld!----10
helloworld!----11
helloworld!----12
helloworld!----13
helloworld!----14
helloworld!----15
helloworld!----16
helloworld!----17
helloworld!----18
helloworld!----19
helloworld!----20
helloworld!----21
helloworld!----22
helloworld!----23
helloworld!----24
helloworld!----25
helloworld!----26
helloworld!----27
helloworld!----28
helloworld!----29
helloworld!----30
helloworld!----31
helloworld!----32
helloworld!----33
helloworld!----34
helloworld!----35
helloworld!----36
helloworld!----37
helloworld!----38
helloworld!----39
helloworld!----40
helloworld!----41
helloworld!----42
helloworld!----43
helloworld!----44
helloworld!----45
helloworld!----46
helloworld!----47
helloworld!----48
helloworld!----49
helloworld!----50
helloworld!----51
helloworld!----52
helloworld!----53
helloworld!----54
helloworld!----55
helloworld!----56
helloworld!----57
helloworld!----58
helloworld!----59
如果使用run方法:
class Demo extends Thread{
private String name;
Demo(String name){
this.name=name;
}
public void run(){//将运行的代码放在run方法中
for(int x=0;x<60;x++) {
System.out.println(name+"demo run-----"+x);
}
}
}
class ThreadDemo{
public static void main(String[] args){
Demo d1= new Demo("one");//创建好一个线程
Demo d2= new Demo("two");
d1.run();
d2.run();
for(int x=0;x<60;x++){
System.out.println("helloworld!----"+x);
}
}
}
执行结果:
onedemo run-----0
onedemo run-----1
onedemo run-----2
onedemo run-----3
onedemo run-----4
onedemo run-----5
onedemo run-----6
onedemo run-----7
onedemo run-----8
onedemo run-----9
onedemo run-----10
onedemo run-----11
onedemo run-----12
onedemo run-----13
onedemo run-----14
onedemo run-----15
onedemo run-----16
onedemo run-----17
onedemo run-----18
onedemo run-----19
onedemo run-----20
onedemo run-----21
onedemo run-----22
onedemo run-----23
onedemo run-----24
onedemo run-----25
onedemo run-----26
onedemo run-----27
onedemo run-----28
onedemo run-----29
onedemo run-----30
onedemo run-----31
onedemo run-----32
onedemo run-----33
onedemo run-----34
onedemo run-----35
onedemo run-----36
onedemo run-----37
onedemo run-----38
onedemo run-----39
onedemo run-----40
onedemo run-----41
onedemo run-----42
onedemo run-----43
onedemo run-----44
onedemo run-----45
onedemo run-----46
onedemo run-----47
onedemo run-----48
onedemo run-----49
onedemo run-----50
onedemo run-----51
onedemo run-----52
onedemo run-----53
onedemo run-----54
onedemo run-----55
onedemo run-----56
onedemo run-----57
onedemo run-----58
onedemo run-----59
twodemo run-----0
twodemo run-----1
twodemo run-----2
twodemo run-----3
twodemo run-----4
twodemo run-----5
twodemo run-----6
twodemo run-----7
twodemo run-----8
twodemo run-----9
twodemo run-----10
twodemo run-----11
twodemo run-----12
twodemo run-----13
twodemo run-----14
twodemo run-----15
twodemo run-----16
twodemo run-----17
twodemo run-----18
twodemo run-----19
twodemo run-----20
twodemo run-----21
twodemo run-----22
twodemo run-----23
twodemo run-----24
twodemo run-----25
twodemo run-----26
twodemo run-----27
twodemo run-----28
twodemo run-----29
twodemo run-----30
twodemo run-----31
twodemo run-----32
twodemo run-----33
twodemo run-----34
twodemo run-----35
twodemo run-----36
twodemo run-----37
twodemo run-----38
twodemo run-----39
twodemo run-----40
twodemo run-----41
twodemo run-----42
twodemo run-----43
twodemo run-----44
twodemo run-----45
twodemo run-----46
twodemo run-----47
twodemo run-----48
twodemo run-----49
twodemo run-----50
twodemo run-----51
twodemo run-----52
twodemo run-----53
twodemo run-----54
twodemo run-----55
twodemo run-----56
twodemo run-----57
twodemo run-----58
twodemo run-----59
helloworld!----0
helloworld!----1
helloworld!----2
helloworld!----3
helloworld!----4
helloworld!----5
helloworld!----6
helloworld!----7
helloworld!----8
helloworld!----9
helloworld!----10
helloworld!----11
helloworld!----12
helloworld!----13
helloworld!----14
helloworld!----15
helloworld!----16
helloworld!----17
helloworld!----18
helloworld!----19
helloworld!----20
helloworld!----21
helloworld!----22
helloworld!----23
helloworld!----24
helloworld!----25
helloworld!----26
helloworld!----27
helloworld!----28
helloworld!----29
helloworld!----30
helloworld!----31
helloworld!----32
helloworld!----33
helloworld!----34
helloworld!----35
helloworld!----36
helloworld!----37
helloworld!----38
helloworld!----39
helloworld!----40
helloworld!----41
helloworld!----42
helloworld!----43
helloworld!----44
helloworld!----45
helloworld!----46
helloworld!----47
helloworld!----48
helloworld!----49
helloworld!----50
helloworld!----51
helloworld!----52
helloworld!----53
helloworld!----54
helloworld!----55
helloworld!----56
helloworld!----57
helloworld!----58
helloworld!----59
总结:run方法无论执行多少次结果都一样,而start是开启多线程的,每次执行的结果根据CPU执行结果,每次都不一样;
java学习之- 创建线程run和start特点的更多相关文章
- java学习之创建线程方法二
我们上一节当中讲到了创建线程的第一种方法,就是继承Thread类,覆写Thread当中的run方法,然后创建子类对象,之后调用对象的start方法启动线程.但是这种方法有一个缺陷,因为我们知道在jav ...
- 0040 Java学习笔记-多线程-线程run()方法中的异常
run()与异常 不管是Threade还是Runnable的run()方法都没有定义抛出异常,也就是说一条线程内部发生的checked异常,必须也只能在内部用try-catch处理掉,不能往外抛,因为 ...
- java学习笔记15--多线程编程基础2
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note15.html,转载请注明源地址. 线程的生命周期 1.线程的生命周期 线程从产生到消亡 ...
- Java中如何创建线程
Java中如何创建线程 两种方式:1)继承Thread类:2)实现Runnable接口. 1.继承Thread类 继承Thread类,重写run方法,在run方法中定义需要执行的任务. class M ...
- Java并发--如何创建线程
下面是本文的目录大纲: 一.Java中关于应用程序和进程相关的概念 二.Java中如何创建线程 三.Java中如何创建进程 转载原文链接:http://www.cnblogs.com/dolphin0 ...
- JAVA学习笔记16——线程的创建和启动
Java使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例.每个线程的作用是完成一定的任务,实际上就是执行一段程序流(一段顺序执行的代码).Java使用线程执行体来代表这段 ...
- java学习笔记之线程(Thread)
刚开始接触java多线程的时候,我觉得,应该像其他章节的内容一样,了解了生命周期.构造方法.方法.属性.使用的条件,就可以结束了,然而随着我的深入学习了解,我发现java的多线程是java的一个特别重 ...
- java学习笔记14--多线程编程基础1
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note14.html,转载请注明源地址. 多线程编程基础 多进程 一个独立程序的每一次运行称为 ...
- java核心知识点----创建线程的第三种方式 Callable 和 Future CompletionService
前面已经指出通过实现Runnable时,Thread类的作用就是将run()方法包装成线程执行体,那么是否可以直接把任意方法都包装成线程执行体呢?Java目前不行,但其模仿者C#中是可以的. Call ...
随机推荐
- 杜恩德的新博客,都来看看-duende99
啊啊啊啊 https://home.cnblogs.com/u/duende99/
- Swoole开启守护进程后如何关闭
查找相应端口号对应的PID(以我的为例,我的是9501端口) netstat -apn | 清除这个进程 启动客户端这时就会报错连不上了,证明服务已关
- 关于chrome请求被挂起页面加载缓慢问题的追查
请参考FEX团队探究结果 http://fex.baidu.com/blog/2015/01/chrome-stalled-problem-resolving-process/ 结论如下: 请求成功构 ...
- ArcGis执行StartEditing(true)时,winform程序直接崩溃.
问题描述:在Program中配置了ArcGis的许可,又在winform窗体添加了许可,导致执行StartEditing(true)时,winform程序直接崩溃. 原代码如下: static cla ...
- Mac中如何查看电脑的IP地址
方法一:使用ifconfig命令 方法二:在charles中查看 Charles 的顶部菜单的 “Help”->”Local IP Address”,即可在弹出的对话框中看到 IP 地址,如下图 ...
- html元素标签时间格式化
<fmt:formatDate value="${user.loginTime}" pattern="yyyy-MM-dd HH:mm:ss"/>
- linux ssh连接超时断连设置
以下均针对redhat6.5系统进行说明. 一.设置ssh超时断连 使用root用户,编辑/etc/profile文件,在 HOSTNAME='/bin/hostname' HISTIZE=30 后增 ...
- 一、Core授权(基于cookie)
一.Core的授权 配置 打开项目中的Startup.cs文件,找到ConfigureServices方法,我们通常在这个方法里面做依赖注入的相关配置.添加如下代码: public void Conf ...
- SQL小操作
用string.Format格式化参数 string sqlCmd = string.Format("select NO from [dbo].[SendAcerData] where BA ...
- LaunchScreen 设置启动图片出现的问题
更换启动图片的时候出现了一系列的小问题,让人头疼,怀疑人生. 1.更换了图片,显示还是老的图片! -->重启手机,clean Xcode 2.设置布局的时候,请务必要这么布局,很完美! 如果你 ...