java多线程总结笔记4——线程互斥与同步

12 篇文章 0 订阅

线程互斥

 线程互斥靠synchronized关键字来实现。

synchronized(钥匙)
{互斥区代码}

只有拿到了钥匙才可以进入互斥区代码。

任何对象都可以作为钥匙,不过为了让代码看起来更有意义,一般就将互斥资源作为钥匙。


线程同步

线程同步靠Object类的wait/notify函数来实现,这两个函数只能出现在synchronized的花括号内。

钥匙.wait()使得线程放弃钥匙,然后睡眠等着钥匙,没有其他线程叫它的话它是不会醒的。当然,睡眠时是不会抢钥匙的,所以永远也得不到钥匙。

如果是钥匙.wait(ms)或钥匙.wait(ms,ns)的话,就算没有其它线程叫,时间到了也会自己醒来。

钥匙.notify()使得一个睡眠等着钥匙的线程醒来,以便它可以去抢钥匙然后继续执行剩余的互斥区代码。钥匙.notifyAll()可以叫醒所有睡眠等待钥匙的线程。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值