avatar
g*g
2
You don't need another lock.

()
block

【在 p*******8 的大作中提到】
: 网上看到的实现:http://tutorials.jenkov.com/java-concurrency/blocking-queues.html
: 如果用一个锁,那么同时只能有一个线程调用其中的一个方法,比如说线程1调用put()
: , 发现queue满了,就等在那;其他线程肯定不能调用任意一个方法,线程1因为block
: 也不会去调用take(),那不是永远锁着了?

avatar
b*n
3
说过多少遍了, just Google grepcode blocking queque, 就知道Java怎么实现
blockingqueue

()
block

【在 p*******8 的大作中提到】
: 网上看到的实现:http://tutorials.jenkov.com/java-concurrency/blocking-queues.html
: 如果用一个锁,那么同时只能有一个线程调用其中的一个方法,比如说线程1调用put()
: , 发现queue满了,就等在那;其他线程肯定不能调用任意一个方法,线程1因为block
: 也不会去调用take(),那不是永远锁着了?

avatar
p*8
4
好虫大神能展开说说吗?synchronized就算一个lock了吧?

【在 g*****g 的大作中提到】
: You don't need another lock.
:
: ()
: block

avatar
p*8
5
看了啊,ArrayBlockingQueue的思路跟上面链接的一样,LinkedBlockingQueue用了两
个单独的takeLock, putLock, 怎样保证thread-safe?
LinkedBlockingQueue: http://www.docjar.com/html/api/java/util/concurrent/LinkedBlockingQueue.java.html
ArrayBlockingQueue:
http://grepcode.com/file/repository.grepcode.com/java/root/jdk/

【在 b******n 的大作中提到】
: 说过多少遍了, just Google grepcode blocking queque, 就知道Java怎么实现
: blockingqueue
:
: ()
: block

avatar
H*n
6
对于同一个queue对象,同时只能有一个synchronized的method被调用,所以用
synchronized就完全可以做到了。

()
block

【在 p*******8 的大作中提到】
: 网上看到的实现:http://tutorials.jenkov.com/java-concurrency/blocking-queues.html
: 如果用一个锁,那么同时只能有一个线程调用其中的一个方法,比如说线程1调用put()
: , 发现queue满了,就等在那;其他线程肯定不能调用任意一个方法,线程1因为block
: 也不会去调用take(),那不是永远锁着了?

avatar
p*8
7
我明白你的意思,我找到我前面问题的答案了:
1. 调用wait() 会release掉当前的锁, 所以其他线程可以调用take()
2. 关于java linkedBlockingQueue的实现,为什么两个不用的锁也可以, 因为enqueue
/dequeue的操作只分别对head/tail的操作,所以put/take可以同时进行

【在 H********n 的大作中提到】
: 对于同一个queue对象,同时只能有一个synchronized的method被调用,所以用
: synchronized就完全可以做到了。
:
: ()
: block

avatar
c*1
8
Thread 1 is in wait() state, it doesn't hold lock of the queue.

()
block

【在 p*******8 的大作中提到】
: 网上看到的实现:http://tutorials.jenkov.com/java-concurrency/blocking-queues.html
: 如果用一个锁,那么同时只能有一个线程调用其中的一个方法,比如说线程1调用put()
: , 发现queue满了,就等在那;其他线程肯定不能调用任意一个方法,线程1因为block
: 也不会去调用take(),那不是永远锁着了?

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。