Java—锁—等待唤醒机制

答:不会,要先有执行资格和执行权然后才会执行下面的代码。

线程的安全问题

同步代码块

线程锁:

把操作共享数据的代码锁起来

特点1:锁默认打开,有一个线程进去了,锁自动关闭

特点2:里面的代码全部执行完毕,线程出来,锁自动打开

练习:某电影院目前正在上映国产大片,共有19张票,而它有3个窗口卖票,请设计一个程序模拟该电影院卖票

锁对象还可以改写成:MyThread.class

同步方法

就是把synchronized关键字加到方法上

练习:某电影院目前正在上映国产大片,共有19张票,而它有3个窗口卖票,请设计一个程序模拟该电影院卖票

注意:这里int ticket=0前面没有加静态,因为这里就创建了一个myrunble的对象。

这里因为执行过快会出现只有一个窗口买票的情况

如果想要看到窗口交织的情况可以加上thread.sleep(参数).

改为同步方法:

Lock锁

代码练习:某电影院目前正在上映国产大片,共有19张票,而它有3个窗口卖票,请设计一个程序模拟该电影院卖票

1.程序不会停止因为当ticked=100时执行break代码会直接跳到while的外面没有执行关索拿着锁对象出去没有把锁打开。2线程和3线程会一直停在锁对象哪里,程序不会关闭。

2.这里lock加static静态是因为有多个对象需要共享一个

想要解决写try catch finally, finally里面的代码一定会执行

死锁

死锁:不是一个知识点,是一个错误。

学习目的:不犯这样的错误。

一句话俩个锁不能嵌套

等待唤醒机制

常见方法:

例子,吃面条

消费者代码

生产者代码

等待唤醒机制(阻塞队列方式实现)

阻塞队列的继承结构:

代码案例:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值