锁的问题

miss_fang999 2017-10-12 03:46:42

为什么不能通过第二个任务(blocked2)执行f()呢?第二个任务里不是创建了一个对象吗?
...全文
335 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
miss_fang999 2017-10-12
  • 打赏
  • 举报
回复
引用 3 楼 IAmTrudy 的回复:
上网查了查,你知道.lock()是干什么,他是将该对象上锁(给当前的线程),你注意看你是什么时候去创建的线程,应该是主线程去创建的,而在线程中new了BlockedMutex,这时候,调用了构造,其实就是上锁,现在这个锁在主线程手中,然后你要用创建的线程去调用.f(),所以没锁过不去。建议一步一步来,先自己看看百度(谷歌没了..),这个我也是现学现用,不知道你是什么级别的,但是猜你应该是比较初级的,一开始就看这些很打击,不建议钻研这
原来是这样,我在main里创建对象是可以调用f()然后输出的,只是无法在第二个任务调用输出。
u010222066 2017-10-12
  • 打赏
  • 举报
回复


查了一下官方的API的解释:获取锁,除非当前线程中断,否则一直阻塞
因此,lock.lockInterruptibly(); 下面的一行 system.out.println()一直不会被执行。
IAmTrudy 2017-10-12
  • 打赏
  • 举报
回复
上网查了查,你知道.lock()是干什么,他是将该对象上锁(给当前的线程),你注意看你是什么时候去创建的线程,应该是主线程去创建的,而在线程中new了BlockedMutex,这时候,调用了构造,其实就是上锁,现在这个锁在主线程手中,然后你要用创建的线程去调用.f(),所以没锁过不去。建议一步一步来,先自己看看百度(谷歌没了..),这个我也是现学现用,不知道你是什么级别的,但是猜你应该是比较初级的,一开始就看这些很打击,不建议钻研这
u010222066 2017-10-12
  • 打赏
  • 举报
回复
因为在构造函数里面lock.lock()已经持有了锁,所以在执行
lock.lockInterruptibly();
时被阻塞,直到锁被释放,但是会响应中断
IAmTrudy 2017-10-12
  • 打赏
  • 举报
回复
f方法应该是调用了,其他表示不理解

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧