面向对象-多线程、继承Thread类和实现Runnable接口
2018-03-19 09:21
330 查看
进程:是一个正在执行中的程序。每一个进程执行都有一个执行顺序,该顺序是一个执行路径,或者叫一个控制单元。
线程:就是进程中的一个独立的控制单元。吸纳城在控制着进程的执行。
一个进程中至少有一个线程。
Java VM 启动的时候会有一个进程java.exe
进程中至少有一个线程负责java程序的执行,而且这个线程运行的代码存在于main方法中。
该线程称之为主线程。
扩展:其实更细节说明jvm,jvm启动不止一个线程,还有负责垃圾回收机制的线程。
1、如何在自定义的代码中,自定义一个线程呢?
通过对api的查找,java已经提供了对线程这类事物的描述->Thread类。
创建线程的第一种方式:继承Tread类。
步骤:
1、定义类继承Thread。
2、复写Thread类中的run方法。(目的:将自定义代码存储在run方法,让线程运行)
3、调用线程的start方法,该方法两个作用:启动线程,调用run方法。
线程都有自己的默认的名称,Thread-编号,编号从零开始。a.start();//开启线程并执行该线程的run方法
a.run();//仅仅是对象调用方法,而线程创建了,并没有运行static Thread currentThread():获取当前线程对象。
getName():获取线程名称。
setName()或者构造函数:设置线程名称。
为什么要覆盖run方法呢?
Thread类用于描述线程,该类就定义了一个功能,用于存储线程要运行的代码,该存储功能就是run方法。
也就是说Thread类中的run方法,用于存储线程要运行的代码。
运行的结果每一次都不同。因为多个线程都收获cup的执行权,cpu执行到谁,谁就运行。
在某一个时刻,只能有一个程序在运行(多核除外),cpu在做着快速的切换,已达到看上去是同时运行的效果。
我们可以理解为多线程的运行行为是在互相抢夺cpu的执行权。
这就是多线程的一个特性L随机性。谁抢到谁执行,至于执行时间,cpu说的算。
创建线程的第二种方式:实现Runnable接口
步骤:
1、定义类实现Runable接口中的run方法。
2、覆盖Runnable接口中的run方法。将线程要运行的代码存放在run方法中。
3、通过Thread类建立线程对象。
4、将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。
为什么要将Runnable接口的子类对象传递给Thread的构造函数?
因为自定义的run方法所属的对象是Runnable接口的子类对象,所以要让线程去指定对象的run方法。就必须明确该run方法所属对象。
5、调用Thread类的start方法开启线程并调用Runnable接口子类的run方法。
实现方式和继承方式有什么区别?
实现方式好处:避免了单继承的局限性。
在定义线程时,建议使用实现方式。
两种方式的区别:
继承Thread:线程代码存放Thread子类run方法中。
实现Runnable:线程代码存放在接口的子类的run方法中。
线程的运行状态:
被创建:start();
运行:具备运行资格,有执行权
临时:具备运行资格,没有执行权
冻结:放弃了执行资格
消亡:stop();run();方法结束
线程:就是进程中的一个独立的控制单元。吸纳城在控制着进程的执行。
一个进程中至少有一个线程。
Java VM 启动的时候会有一个进程java.exe
进程中至少有一个线程负责java程序的执行,而且这个线程运行的代码存在于main方法中。
该线程称之为主线程。
扩展:其实更细节说明jvm,jvm启动不止一个线程,还有负责垃圾回收机制的线程。
1、如何在自定义的代码中,自定义一个线程呢?
通过对api的查找,java已经提供了对线程这类事物的描述->Thread类。
创建线程的第一种方式:继承Tread类。
步骤:
1、定义类继承Thread。
2、复写Thread类中的run方法。(目的:将自定义代码存储在run方法,让线程运行)
3、调用线程的start方法,该方法两个作用:启动线程,调用run方法。
线程都有自己的默认的名称,Thread-编号,编号从零开始。a.start();//开启线程并执行该线程的run方法
a.run();//仅仅是对象调用方法,而线程创建了,并没有运行static Thread currentThread():获取当前线程对象。
getName():获取线程名称。
setName()或者构造函数:设置线程名称。
为什么要覆盖run方法呢?
Thread类用于描述线程,该类就定义了一个功能,用于存储线程要运行的代码,该存储功能就是run方法。
也就是说Thread类中的run方法,用于存储线程要运行的代码。
运行的结果每一次都不同。因为多个线程都收获cup的执行权,cpu执行到谁,谁就运行。
在某一个时刻,只能有一个程序在运行(多核除外),cpu在做着快速的切换,已达到看上去是同时运行的效果。
我们可以理解为多线程的运行行为是在互相抢夺cpu的执行权。
这就是多线程的一个特性L随机性。谁抢到谁执行,至于执行时间,cpu说的算。
创建线程的第二种方式:实现Runnable接口
步骤:
1、定义类实现Runable接口中的run方法。
2、覆盖Runnable接口中的run方法。将线程要运行的代码存放在run方法中。
3、通过Thread类建立线程对象。
4、将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。
为什么要将Runnable接口的子类对象传递给Thread的构造函数?
因为自定义的run方法所属的对象是Runnable接口的子类对象,所以要让线程去指定对象的run方法。就必须明确该run方法所属对象。
5、调用Thread类的start方法开启线程并调用Runnable接口子类的run方法。
实现方式和继承方式有什么区别?
实现方式好处:避免了单继承的局限性。
在定义线程时,建议使用实现方式。
两种方式的区别:
继承Thread:线程代码存放Thread子类run方法中。
实现Runnable:线程代码存放在接口的子类的run方法中。
线程的运行状态:
被创建:start();
运行:具备运行资格,有执行权
临时:具备运行资格,没有执行权
冻结:放弃了执行资格
消亡:stop();run();方法结束
相关文章推荐
- 面向对象-多线程、继承Thread类和实现Runnable接口
- JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没
- Java【多线程知识总结(5)】比较继承Thread类创建线程和实现Runnable接口创建线程这两种方式
- 实现多线程有两种方法: Thread类继承和Runnable接口实现
- 实现多线程的两种方法:继承Thread类或实现Runnable接口
- Java 多线程实现接口Runnable和继承Thread区别 (2
- java多线程(继承Thread以及实现Runnable接口)
- java实现多线程的两种方式继承Thread类和实现Runnable接口
- Java【多线程知识总结(5)】比较继承Thread类创建线程和实现Runnable接口创建线程这两种方式
- 多线程——Java中继承Thread类与实现Runnable接口的区别
- Java并发03:多线程实现三方式:继承Thread类、实现Runnable接口、实现Callable接口
- 实现多线程有两种方法: Thread类继承和Runnable接口实现
- Android---多线程:继承Thread 类和实现Runnable 接口的区别
- JAVA 两种方法实现多线程(继承Thread和实现Runnable接口)
- 对比:通过实现Runnable接口和继承thread类来生成多线程
- Java基础知识强化之多线程笔记05:Java中继承thread类 与 实现Runnable接口的区别
- 实现多线程有两种方法: Thread类继承和Runnable接口实现
- 实现多线程时继承Thread和实现Runnable接口的区别和用法
- 多线程中的继承Thread类和实现Runnable接口的区别
- Java 实现多线程的3种方法:继承Thread类;实现Runnable接口;实现Callable接口。具体代码实现实例