【幻化万千戏红尘】qianfengDay22-java基础学习:线程安全、synchronized、死锁

课程回顾:


进程:独立的应用程序
多进程
线程:进程内部的执行路径
多线程
线程的创建方式:
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个线程都会阻塞,最终带来死锁现象


所有我们在开发中,需要加大锁的粒度
就是说,我们尽量锁当前类对象,而不要去锁类内部的属性



















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值