【幻化万千戏红尘】qianfengDay22-java基础学习:线程安全、synchronized、死锁
2016-08-11 10:03
453 查看
课程回顾:
进程:独立的应用程序
多进程
线程:进程内部的执行路径
多线程
线程的创建方式:
1、继承Thread
2、实现Runnable
用户和守护线程
优先级
线程调度
生命周期
今日内容:
线程安全:当多个线程操作同一数据源时,可能会引发数据安全的问题
引发线程安全的条件:
1、多线程
2、同一数据源
3、修改数据源
只有满足上述条件,才有可能会出现安全问题
避免线程安全:尽量使用局部变量,少用成员变量
synchronized ['sɪŋkrənaɪz] 互斥锁关键字,同步,主要是解决线程安全的问题
1、修饰代码块:同步代码块,出现在方法中
格式:synchronize(Object){
可能引发安全的代码块
}
锁的存在可以保证,在任何一个时刻只能有一个线程拥有它
如果线程要为对象上锁,如果对象可以上锁,那么就上锁成功,如果对象已经上过锁,
当前线程会由运行状态进入阻塞状态,等待着对象的锁的释放
2、修饰方法:同步方法
格式:[修饰符] synchronize 返回值类型 方法名([形式参数列表])
{
可能引发安全的代码块
}
修饰非静态/对象/实例方法,锁的是本类对象
修饰静态方法,锁的是类对应的Class对象
多线程:切记只有当多个线程在操作同一个锁的对象的时候,才会引起阻塞,保护数据
死锁:
多个线程之间相互锁住彼此需要的对象,
从而使得多个线程都进入了阻塞状态,无法参与CPU的抢夺,就照成了死锁
比如:A线程锁住资源1,等待资源2,B线程锁住资源2等待资源1,这时2个线程都会阻塞,最终带来死锁现象
所有我们在开发中,需要加大锁的粒度
就是说,我们尽量锁当前类对象,而不要去锁类内部的属性
进程:独立的应用程序
多进程
线程:进程内部的执行路径
多线程
线程的创建方式:
1、继承Thread
2、实现Runnable
用户和守护线程
优先级
线程调度
生命周期
今日内容:
线程安全:当多个线程操作同一数据源时,可能会引发数据安全的问题
引发线程安全的条件:
1、多线程
2、同一数据源
3、修改数据源
只有满足上述条件,才有可能会出现安全问题
避免线程安全:尽量使用局部变量,少用成员变量
synchronized ['sɪŋkrənaɪz] 互斥锁关键字,同步,主要是解决线程安全的问题
1、修饰代码块:同步代码块,出现在方法中
格式:synchronize(Object){
可能引发安全的代码块
}
锁的存在可以保证,在任何一个时刻只能有一个线程拥有它
如果线程要为对象上锁,如果对象可以上锁,那么就上锁成功,如果对象已经上过锁,
当前线程会由运行状态进入阻塞状态,等待着对象的锁的释放
2、修饰方法:同步方法
格式:[修饰符] synchronize 返回值类型 方法名([形式参数列表])
{
可能引发安全的代码块
}
修饰非静态/对象/实例方法,锁的是本类对象
修饰静态方法,锁的是类对应的Class对象
多线程:切记只有当多个线程在操作同一个锁的对象的时候,才会引起阻塞,保护数据
死锁:
多个线程之间相互锁住彼此需要的对象,
从而使得多个线程都进入了阻塞状态,无法参与CPU的抢夺,就照成了死锁
比如:A线程锁住资源1,等待资源2,B线程锁住资源2等待资源1,这时2个线程都会阻塞,最终带来死锁现象
所有我们在开发中,需要加大锁的粒度
就是说,我们尽量锁当前类对象,而不要去锁类内部的属性
相关文章推荐
- 【幻化万千戏红尘】qianfengDay23-java基础学习:网络编程、TCP IP协议、端口Socket、ServerSocket
- 【幻化万千戏红尘】qianfengDay02-java基础学习:运算符、进制转换
- 【幻化万千戏红尘】qianfengDay15-java基础学习:List,ArrayList,LinkedList,comparable,comparator
- 【幻化万千戏红尘】qianfengDay10-java基础学习:成员内部类、静态内部类、局部和匿名内部类,设计模式之简单工厂模式
- 【幻化万千戏红尘】qianfengDay19-java基础学习:转换流、对象流、打印流、三大标准(重定向)
- 【幻化万千戏红尘】qianfengDay16-java基础学习:HashMap,HashTable,TreeMap
- 【幻化万千戏红尘】qianfengDay12-java基础学习:二维数组、异常、错误
- 【幻化万千戏红尘】qianfengDay24-java基础学习:数据库、七大表语句、JDBC反射
- 【幻化万千戏红尘】qianfengDay08-java基础学习:修饰符、重写、继承、抽象、递归、final
- 【幻化万千戏红尘】qianfengDay04-java基础学习:for语句.while语句,do-while语句
- 【幻化万千戏红尘】qianfengDay17-java基础学习:泛型,路径,File类,IO流
- 【幻化万千戏红尘】qianfengDay01-java基础学习:历史、数据类型
- 【幻化万千戏红尘】qianfengDay07-java基础学习:static、设计模式之单例模式
- 【幻化万千戏红尘】qianfengDay06-java基础学习:重载、方法、类、对象、构造方法
- 【幻化万千戏红尘】qianfengDay13-java基础学习:String ,StringBuilder,StringBuffer,Date,Calendar
- 【幻化万千戏红尘】qianfengDay14-java基础学习:集合,ArrayList,Iterator,LinkedList
- 【幻化万千戏红尘】qianfengDay09-java基础学习:接口,抽象类,抽象方法,多态,instanceof
- 【幻化万千戏红尘】qianfengDay11-java基础学习:数组,排序,算法
- 【幻化万千戏红尘】qianfengDay05-java基础学习:方法、return、重载
- 【幻化万千戏红尘】qianfengDay03-java基础学习:for循环,switch,if