标签(空格分隔): 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. SpringMVC-JSON数据交换

    在上Springmvc-JSON数据交换的时候,老师提出了两个问题: 1.JSON数据交互两个注解的作用? 2.静态资源访问的几种配置方式,并简述? 老师刚提出这两个问题的时候我一头雾水的.JSON数 ...

  2. PHPStorm 远程开发教程

    目的:实现在windows下开发,而所改变代码自动同步到虚拟机 查看虚拟机的 IP地址 配置代码自动同步信息 通过页面上部的选项卡,切换到 Mappings 根路径:指的都是项目代码的根路径 点击一次 ...

  3. 三种动态加载js的jquery实例代码另附去除js方法

    !-- 这里为你提供了三种动态加载js的jquery实例代码哦,由于jquery是为用户提供方便的,所以利用jquery动态加载文件只要一句话$.getscript("test.js&quo ...

  4. 硬盘安装ubuntu遇到的问题

    终于把这个系统给装上了,陆陆续续弄了4,5天(崩溃...),一直一来都是用U盘来装ubuntu的,挺简单的,但是这个主机识别不了U盘不知道为什么...这个问题又是百度又是Google最终找不到原因只好 ...

  5. shared_ptr的原理与应用

    new与赋值的坑 赋值(assignment)和new运算符在C++与Java(或C#)中的行为有本质的区别.在Java中,new是对象的构造,而赋值运算是引用的传递:而在C++中,赋值运算符意味着& ...

  6. SIP协议 会话发起协议(二)

    SIP - 响应码 SIP响应是由用户代理服务器(UAS)或SIP服务器生成的用于回复客户端生成的请求的消息.这可能是一个正式的确认,以防止UAC转发请求. 响应可能包含UAC所需的一些额外的信息头字 ...

  7. oracle数据库应用总结

    1------->>>>>>>>>>>>>>>>>>>>>>> ...

  8. Binary Numbers AND Sum CodeForces - 1066E (前缀和)

    You are given two huge binary integer numbers aa and bb of lengths nn and mmrespectively. You will r ...

  9. Zookeeper客户端使用(使用原生zookeeper)

    Zookeeper客户端使用 一.使用原生zookeeper 在pom.xml中加入依赖 <dependency> <groupId>org.apache.zookeeper& ...

  10. JSONP 跨域请求原理

    0x00 简介 由于浏览器的同源策略,我们想要从别的域获取数据变得困难,需要特殊的技术才能获取 0x01 使用 客户域:client.com 服务器(他域):server.com 如客户想访问 : h ...