标签(空格分隔): 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. kafka 教程(一)-初识kafka

    消息队列 MQ 消息队列就是 消息 message 加 队列 queue,是一种消息传输的容器,提供生产和消费 API 来存储和获取消息. 消息队列分两种:点对点(p2p).发布订阅(pub/sub) ...

  2. DNS 缓存投毒

    原文:[DNS Cache Poisoning]( https://medium.com/iocscan/dns-cache-poisoning-bea939b5afaf) 译者:neal1991 w ...

  3. Java的GUI框架如何选择? Swing、SWT、AWT、SwingX、JGoodies、JavaFX、Apache Pivot、BeautyEye框架(美观)?

    AWT 是swing的基础,运行良好,但缺少高级组件.如果您打算创建丰富的应用程序,那么AWT可能不是最好的方法.但是对于不需要丰富用户界面的较小gui应用程序来说.这可能非常适合,因为它是一个久经考 ...

  4. 折半搜索+Hash表+状态压缩 | [Usaco2012 Open]Balanced Cow Subsets | BZOJ 2679 | Luogu SP11469

    题面:SP11469 SUBSET - Balanced Cow Subsets 题解: 对于任意一个数,它要么属于集合A,要么属于集合B,要么不选它.对应以上三种情况设置三个系数1.-1.0,于是将 ...

  5. vue2.0 笔记(杂记)

    一.vue class.style表达式的类型: 字符串.对象和数组1.字符串 <div class="static" v-bind:class="class-a& ...

  6. TypeError: Cannot read property 'splice' of undefined

    splice是删除数组里的项,报这个错证明你点前面那个并不是个数组,仔细一看,还真是数组名称写错了

  7. mysqldump导出时 --set-gtid-purged=OFF

    mysqldump导出表 [root@bj db10044]# rpm -qf `which mysqldump`Percona-Server-client-56-5.6.22-rel71.0.el6 ...

  8. linux shell getopt

    linux shell命令行选项与参数用法详解--getopts.getopt https://www.jianshu.com/p/6393259f0a13

  9. Runnable和Thread比较

    看代码 public static void main(String[] args) { // TODO Auto-generated method stub new MyThread().start ...

  10. Shiro(二)

    1 Shiro的授权 1.1 授权流程 1.2 授权方式 shiro支持三种方式的授权 1.2.1 编程式 通过编写if/else完成授权代码. if(subject.hasRole("ro ...