线程初级知识点
2015-06-02 21:35
211 查看
1.进程:是一个正在执行中的程序每一个进程执行,都有一个执行顺序,该顺序是一个执行路径,或者叫控制单元
注:软件启动,都会在内存中分配一片空间,给一个地址,进程就是用来定义空间,标识空间的,用来封装控制单元
2.线程:就是进程中一个独立的控制单元线程在控制着进程的执行
3.一个进程中至少有一个线程。Java VM启动的时候会有一个进程java.exe,该进程中至少有一个线程负责java程序的执行,而且这个线程运行的代码存在于main方法中,该线程称之为主线程
4.cpu在某一时刻只能执行某一个程序,但看起来好多程序在同时执行,实则是cpu在不同程序间进行着快速切换,给人得感觉是看起来好像程序是同时进行的
5.以迅雷下载为例,一个下载请求可以开启多个下载路径,如100M的数据,迅雷会默认分为5个部分,同时发出请求,同时开始下载,这样下载的效率会大大提高在该例子中,迅雷下载叫一个进程,而5个下载请求即可称为线程,即线程是进程中的内容
6.扩展:其实更细节说明jvm,jvm启动不止一个线程,还有负责垃圾回收的线程有多条路径执行的程序,称为多线程程序,如下载程序
7.多线程的存在意义:多线程的出现可以让程序中的部分出现同时运行的效果,如多线程的下载可以提高效率,多线程的一个应用实例
8.线程的创建:方法一:1.继承Thread类,成为Thread类的子类,
2.并且重写run()方法目的:将自定义代码存储在run方法,让线程运行
3.调用线程的start方法作用有俩点,启动线程、调用run()方法
9.为什么要覆盖run方法:Thread类用于描述线程,该类就定义了一个功能,用于存错线程要运行的代码。该存储功能就是run方法也就是说Thread类中的run方法,用于存储线程要运行的代码
10.创建线程的第二种方式:实现Runable接口
步骤:1.定义类实现Runable接口
2.覆盖Runablle接口中的run方法将线程要运行的代码存放在run方法中
3.通过Thread类建立线程对象。
4.将Runable接口的子类对象作为实际参数传递给Thread类的构造函数为什么要将Runable接口的子类对象传递给Thread接口的子类对象所以要让线程去执行指定对象的run方法。就必须明确该run方法所属对象
5.调用Thread类的start方法开启线程并调用Runable接口子类的run方法
11.实现方式和继承方式的区别:
实现方式好处:避免了单继承的局限性在定义线程时,建议使用实现方式
区别: 继承Thread类,线程代码存放Thread子类run方法中
实现Runable,线程代码存在接口的子类的run方法
12.多线程的运行出现了安全问题:
问题的原因:
当多条语句在操作同一个线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行完,另一个线程参与进来执行,导致共享数据的错误
解决办法:
对多条操作共享数据的语句,只能让一个线程都执行完。在执行过程中,其他线程不可以参与执行Java对于多线程的安全问题提供了专业的解决方法,就是同步代码块
synchronized(对象){
需要被同步的代码
}
上述的对象如同锁。持有锁的线程的线程可以在同步中执行。没有持有锁的线程即使获取cpu的执行权,也进不去,因为没有获取锁。
13.同步的前提
1.必须要有俩个或者俩个以上的线程
2.必须是多个线程使用同一个锁
必须保证同步中只能有一个线程在运行
好处:解决了多线程的安全问题
弊端:多个线程需要判断锁,较为消耗资源
14.同步函数用的是哪个锁
函数需要被对象调用。那么函数都有一个所属对象的引用。就是this所以同步函数使用的锁是this
15.静态同步函数用的是哪个锁
静态内存时,内存中没有本类对象,但是一定有该类对应的字节码文件对象,类名.class,该对象的类型是Class
静态的同步方法,使用的锁是该方法所在类的字节码文件对象。类名.class
注:软件启动,都会在内存中分配一片空间,给一个地址,进程就是用来定义空间,标识空间的,用来封装控制单元
2.线程:就是进程中一个独立的控制单元线程在控制着进程的执行
3.一个进程中至少有一个线程。Java VM启动的时候会有一个进程java.exe,该进程中至少有一个线程负责java程序的执行,而且这个线程运行的代码存在于main方法中,该线程称之为主线程
4.cpu在某一时刻只能执行某一个程序,但看起来好多程序在同时执行,实则是cpu在不同程序间进行着快速切换,给人得感觉是看起来好像程序是同时进行的
5.以迅雷下载为例,一个下载请求可以开启多个下载路径,如100M的数据,迅雷会默认分为5个部分,同时发出请求,同时开始下载,这样下载的效率会大大提高在该例子中,迅雷下载叫一个进程,而5个下载请求即可称为线程,即线程是进程中的内容
6.扩展:其实更细节说明jvm,jvm启动不止一个线程,还有负责垃圾回收的线程有多条路径执行的程序,称为多线程程序,如下载程序
7.多线程的存在意义:多线程的出现可以让程序中的部分出现同时运行的效果,如多线程的下载可以提高效率,多线程的一个应用实例
8.线程的创建:方法一:1.继承Thread类,成为Thread类的子类,
2.并且重写run()方法目的:将自定义代码存储在run方法,让线程运行
3.调用线程的start方法作用有俩点,启动线程、调用run()方法
9.为什么要覆盖run方法:Thread类用于描述线程,该类就定义了一个功能,用于存错线程要运行的代码。该存储功能就是run方法也就是说Thread类中的run方法,用于存储线程要运行的代码
10.创建线程的第二种方式:实现Runable接口
步骤:1.定义类实现Runable接口
2.覆盖Runablle接口中的run方法将线程要运行的代码存放在run方法中
3.通过Thread类建立线程对象。
4.将Runable接口的子类对象作为实际参数传递给Thread类的构造函数为什么要将Runable接口的子类对象传递给Thread接口的子类对象所以要让线程去执行指定对象的run方法。就必须明确该run方法所属对象
5.调用Thread类的start方法开启线程并调用Runable接口子类的run方法
11.实现方式和继承方式的区别:
实现方式好处:避免了单继承的局限性在定义线程时,建议使用实现方式
区别: 继承Thread类,线程代码存放Thread子类run方法中
实现Runable,线程代码存在接口的子类的run方法
12.多线程的运行出现了安全问题:
问题的原因:
当多条语句在操作同一个线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行完,另一个线程参与进来执行,导致共享数据的错误
解决办法:
对多条操作共享数据的语句,只能让一个线程都执行完。在执行过程中,其他线程不可以参与执行Java对于多线程的安全问题提供了专业的解决方法,就是同步代码块
synchronized(对象){
需要被同步的代码
}
上述的对象如同锁。持有锁的线程的线程可以在同步中执行。没有持有锁的线程即使获取cpu的执行权,也进不去,因为没有获取锁。
13.同步的前提
1.必须要有俩个或者俩个以上的线程
2.必须是多个线程使用同一个锁
必须保证同步中只能有一个线程在运行
好处:解决了多线程的安全问题
弊端:多个线程需要判断锁,较为消耗资源
14.同步函数用的是哪个锁
函数需要被对象调用。那么函数都有一个所属对象的引用。就是this所以同步函数使用的锁是this
15.静态同步函数用的是哪个锁
静态内存时,内存中没有本类对象,但是一定有该类对应的字节码文件对象,类名.class,该对象的类型是Class
静态的同步方法,使用的锁是该方法所在类的字节码文件对象。类名.class
相关文章推荐
- [转] 从最大似然到EM算法浅解
- 物理结构 逻辑结构
- 实验8,编写一个模板函数求数组中的最大值和最小值
- java装饰模式和适配器模式区别
- python读写文件
- Powerdesigner15-用jdbc链接MySQL实现逆向工程步骤
- 一切成功源于积累——20150602 欧美 1700点 半小时
- klg1
- jvm内存模型
- 发现一个好的开源项目:lomoX(挑着看,每天看一点,看一年就ok了)——用Webkit开发桌面软件,炫
- Kruskal---求最小生成树(贪心算法)
- Eclipse 创建 Maven 项目、Maven JavaWeb 项目
- 第一招:Powerdesigner15-物理模型-导出建表sql语句
- Maven构建JavaWeb项目 Maven转JavaWeb项目 JavaWeb项目转Maven项目
- klg2
- hdu 1166 敌兵布阵 线段树 点更新
- ubuntu14.10 有线连接连接不上
- Linux文件与目录管理
- 编程之美—面试题16 反转链表
- cacti不能显示图像数据故障处理办法