您的位置:首页 > Web前端

【幻化万千戏红尘】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个线程都会阻塞,最终带来死锁现象

所有我们在开发中,需要加大锁的粒度

就是说,我们尽量锁当前类对象,而不要去锁类内部的属性
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐