如何保证线程安全?和防止死锁?(面试必问)

要保证线程安全,就必须保证线程同步。保证线程的可见性有序性原子性同步其实是线程“排队”的意思,就是让线程按照一定的顺序执行。

可见性:一个线程对共享资源的操作,所有的线程都可以看见。可以用volatile关键字

有序性:就是代码的执行顺序是有序的,执行的顺序不会发生改变。

原子性:原子是一个不可分的整体。就是一个代码块,要么全部执行,要么全部不执行,只要其执行了,就无法被任何事务打断。synchronized关键字最主要的就是保持原子性,最主要的就是线程同步,同步最基本的方法就是加锁,加锁最直接的就是加synchronized关键字

防止死锁:

1.互斥条件:

进程要求对所分配的资源(如打印机)进行排他性控制,即在一段时间内某资源仅为一个进程所占有。此时若有其他进程请求该资源,则请求进程只能等待。

2.不可剥夺条件:

进程已获得的资源在未使用完之前,不能剥夺,只能在使用完时由自己释放。

3.请求保持条件:

当进程因请求资源而阻塞时,对已获得的资源保持不放。

4.循环等待条件:

在发生死锁时,必然存在一个进程–资源的环形链。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值