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 ...
随机推荐
- RabbitMQ入门教程(七):主题交换机Topics
原文:RabbitMQ入门教程(七):主题交换机Topics 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog. ...
- echats 油表盘 鼠标拖动指针改变数值
近期需要做一个鼠标拖动完成油表盘数值改变的功能,使用canvas感觉太麻烦,而且指针不太好监听和拖动,只能另谋出路,在网上参考了某位大神的操作,最终选择了echats来解决这个问题.废话不多说,直接上 ...
- vsftpd一些常用配置
常用的全局配置 --设置监听的IP地址 listen_asspress=192.168.4.1 --设置监听FTP服务的端口号 listen_port=21 --是否允许下载文件 download_e ...
- ES6 环境的搭建
安装babel npm install --g babel-cli 在项目目录下输入 npm init -y 会自动创建package.json文件 babel src/index.js -o dis ...
- handlebars杂记
1.{{{caption}}}三个花括号,可以解析 空格 变成 ‘空格’. 2.数据是posts:[{ }]数组时候,可以用{{posts.length}}取得其数组长度 3.handl ...
- NoSQL与其常见的产品
一. 什么是NoSQL NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL",它是一种非关系型数据库. 二. 为什么要有NoSQL 在现代的计算系统上每 ...
- kali 下安装 vmtools
网上的教程都是默认路径下的,kali是定制版本的,路径不同,所以首先要找到media下安装包的路径,然后进入该路下,将安装包复制到想要的路径下,并解压缩到想要的路径下,剩下的就跟网上的差不多了,即找到 ...
- C++有静态成员变量的类继承
声明和定义 1.变量的定义 变量的定义用于为变量分配存储空间,还可以为变量指定初始值.在一个程序中,变量有且仅有一个定义. 2.变量的声明 用于向程序表明变量的类型和名字.程序中变量可以声明多次,但只 ...
- 一、Linux平台部署ASP.NET、ASP.NET CORE、PHP
一.什么是Jexus Jexus是一款Linux平台上的高性能WEB服务器和负载均衡网关服务器,以支持ASP.NET.ASP.NET CORE.PHP为特色,同时具备反向代理.入侵检测等重要功能.可以 ...
- 使用parted 创建一个大于2T的分区
1.查看现有分区 parted -l fdisk -l 2.对/dev/sdb分一个区 [root@test ~]# parted /dev/sdb (parted) mkpart ...