标签(空格分隔): 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特点的更多相关文章

  1. java学习之创建线程方法二

    我们上一节当中讲到了创建线程的第一种方法,就是继承Thread类,覆写Thread当中的run方法,然后创建子类对象,之后调用对象的start方法启动线程.但是这种方法有一个缺陷,因为我们知道在jav ...

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

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

  3. java学习笔记15--多线程编程基础2

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note15.html,转载请注明源地址. 线程的生命周期 1.线程的生命周期 线程从产生到消亡 ...

  4. Java中如何创建线程

    Java中如何创建线程 两种方式:1)继承Thread类:2)实现Runnable接口. 1.继承Thread类 继承Thread类,重写run方法,在run方法中定义需要执行的任务. class M ...

  5. Java并发--如何创建线程

    下面是本文的目录大纲: 一.Java中关于应用程序和进程相关的概念 二.Java中如何创建线程 三.Java中如何创建进程 转载原文链接:http://www.cnblogs.com/dolphin0 ...

  6. JAVA学习笔记16——线程的创建和启动

    Java使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例.每个线程的作用是完成一定的任务,实际上就是执行一段程序流(一段顺序执行的代码).Java使用线程执行体来代表这段 ...

  7. java学习笔记之线程(Thread)

    刚开始接触java多线程的时候,我觉得,应该像其他章节的内容一样,了解了生命周期.构造方法.方法.属性.使用的条件,就可以结束了,然而随着我的深入学习了解,我发现java的多线程是java的一个特别重 ...

  8. java学习笔记14--多线程编程基础1

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note14.html,转载请注明源地址. 多线程编程基础 多进程 一个独立程序的每一次运行称为 ...

  9. java核心知识点----创建线程的第三种方式 Callable 和 Future CompletionService

    前面已经指出通过实现Runnable时,Thread类的作用就是将run()方法包装成线程执行体,那么是否可以直接把任意方法都包装成线程执行体呢?Java目前不行,但其模仿者C#中是可以的. Call ...

随机推荐

  1. linux复习2:Fedora17系统的安装和删除

    一.Linux系统下硬盘的基本知识 1.分区命名方案: (1)Linux系统使用字母和数字的组合来指代硬盘分区 (2)Linux系统使用一种更加灵活的命名方案,该命名方案是基于文件的,文件的命名格式为 ...

  2. ARM系统时钟初始化

    2440时钟体系,12MHz的晶振 6410时钟体系,12MHz的晶振 210时钟体系,24MHz晶振 时钟初始化:1.设置locktime 2.设置分频系数 4.设置CPU到异步工作模式 3.设置f ...

  3. SpringBoot02——A Simple SpringBoot Project&Hot Deployment

    1.简单的Controller映射 1.新建一个controller包,包一定在启动器的下一层级 2.可以在application.properties中进行调整端口和context-path参数 s ...

  4. 解决CRMEasy新建咨询不能保存问题

    系统时间必须为24H制 将12H制修改为24H制的方法:(XP系统) 控制面板---区域和语言选项----区域选项-----自定义---时间----时间格式为:HH:mm:ss-----确定

  5. PHP漏洞函数

    1. is_numeric函数 bool is_numeric ( mixed $var ) 此函数用于判断变量是否数字或者数字字符串,不仅能接受十进制,还能接受十六进制,这样就有了绕过的方法 < ...

  6. Kong组件构成及使用

    Service: Service 顾名思义,就是我们自己定义的上游服务,通过Kong匹配到相应的请求要转发的地方 Service 可以与下面的Route进行关联,一个Service可以有很多Route ...

  7. python实现学生信息系统

    要求:不能重名 ''' 一.需求:进入系统显示系统功能界面,功能如下: 1.添加学员 2.删除学员 3.修改学员信息 4.查询学员信息 5.显示所有学员信息 6.退出功能 ''' # 定义功能界面函数 ...

  8. 【洛谷P1490】买蛋糕

    题目大意:给定一个正整数 N,求至少从 [1,N] 中选出多少个数能够表示出 [1,N] 中的所有整数,每个数只能被选 1 次,并求出对于最优解有多少种不同的选择方案. 题解:好题. 仅考虑用最少的不 ...

  9. 【NOIP2016提高A组集训第3场10.31】高维宇宙

    题解 分析 因为只有奇数和偶数配对才有可能得出质数, 暴力求出每一对\(a_i+a_j\)为质数,将其中的奇数想偶数连一条边. 二分图匹配,匈牙利算法. #include <cmath> ...

  10. 【NOIP2016提高A组模拟9.17】小a的强迫症

    题目 分析 题目要求第i种颜色的最后一个珠子要在第i+1种颜色的最后一个珠子之前, 那么我们从小到大枚举做到第i种,把第i种的最后一颗珠子取出,将剩下的\(num(i)-1\)个珠子插入已排好的前i- ...