由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 这个Java blocking queue实现是不是有问题?
相关主题
thread safe blocking queue问题如何实现binary tree的从下到上的分层打印?
再问一个blockingqueue的问题share 面试题
thread-safe blockingqueue这个用stack实现queue
Java Blocking Queue问题求救: 打印binary tree
实现一个 thread-safe blocking queue这题怎么写啊?L家的常考如何用JAVA中的circular array of queue 解决Josephus problem? (转载)
怎么练习multi-threading,平常工作都是用Java框架问个题:get max value from Queue, with O(1)?
有没有Blocking Bounded Queue 用Pthread实现的Sample Code?面试题
请教一个系统设计问题 (转载)一道很难的面试题
相关话题的讨论汇总
话题: dequeue话题: notifyall话题: object话题: public
进入JobHunting版参与讨论
1 (共1页)
A*******e
发帖数: 2419
1
假设空队列时,先有dequeue执行,发现队列为空,等待。
这时来一个enqueue,调用notifyAll()之后,插入新对象之前,dequeue已经唤醒,试
图去删除,这时队列仍然可能是空啊。
public class BlockingQueue {
private List queue = new LinkedList();
private int limit = 10;
public BlockingQueue(int limit){
this.limit = limit;
}
public synchronized void enqueue(Object item)
throws InterruptedException {
while(this.queue.size() == this.limit) {
wait();
}
if(this.queue.size() == 0) {
notifyAll();
}
this.queue.add(item);
}
public synchronized Object dequeue()
throws InterruptedException{
while(this.queue.size() == 0){
wait();
}
if(this.queue.size() == this.limit){
notifyAll();
}
return this.queue.remove(0);
}
}
A*******e
发帖数: 2419
2
这里看来的。
http://examples.javacodegeeks.com/core-java/util/concurrent/sch

【在 A*******e 的大作中提到】
: 假设空队列时,先有dequeue执行,发现队列为空,等待。
: 这时来一个enqueue,调用notifyAll()之后,插入新对象之前,dequeue已经唤醒,试
: 图去删除,这时队列仍然可能是空啊。
: public class BlockingQueue {
: private List queue = new LinkedList();
: private int limit = 10;
: public BlockingQueue(int limit){
: this.limit = limit;
: }
: public synchronized void enqueue(Object item)

g*****g
发帖数: 34805
3
这年头没人用wait/notify了吧。你真要写也从ReentrantLock开始。

【在 A*******e 的大作中提到】
: 假设空队列时,先有dequeue执行,发现队列为空,等待。
: 这时来一个enqueue,调用notifyAll()之后,插入新对象之前,dequeue已经唤醒,试
: 图去删除,这时队列仍然可能是空啊。
: public class BlockingQueue {
: private List queue = new LinkedList();
: private int limit = 10;
: public BlockingQueue(int limit){
: this.limit = limit;
: }
: public synchronized void enqueue(Object item)

T*********g
发帖数: 496
4
dequeue那个时候还没拿到lock 继续 wait 直到enqueue方法做完

【在 A*******e 的大作中提到】
: 这里看来的。
: http://examples.javacodegeeks.com/core-java/util/concurrent/sch

m*****k
发帖数: 731
5
dequeue那个时候可能已被唤醒,但拿不到lock, 因为synchronized enqueue方法还没
退出
A*******e
发帖数: 2419
6
明白了。Java有很多要学习啊。还是得看书。

【在 m*****k 的大作中提到】
: dequeue那个时候可能已被唤醒,但拿不到lock, 因为synchronized enqueue方法还没
: 退出

r****c
发帖数: 2585
7
没有退出不是问题啊,没有必要最后一句才是notify,看Oracle example
https://docs.oracle.com/javase/tutorial/essential/concurrency/guardmeth.html
r****c
发帖数: 2585
8
synchronized method就已经独享了这个object lock,知道这个thread退出,其他
synchronized method不可以执行

【在 A*******e 的大作中提到】
: 假设空队列时,先有dequeue执行,发现队列为空,等待。
: 这时来一个enqueue,调用notifyAll()之后,插入新对象之前,dequeue已经唤醒,试
: 图去删除,这时队列仍然可能是空啊。
: public class BlockingQueue {
: private List queue = new LinkedList();
: private int limit = 10;
: public BlockingQueue(int limit){
: this.limit = limit;
: }
: public synchronized void enqueue(Object item)

D**C
发帖数: 6754
9
wait 和 notify 都是要基于一个object的,这code根本就不会compile吧

【在 A*******e 的大作中提到】
: 假设空队列时,先有dequeue执行,发现队列为空,等待。
: 这时来一个enqueue,调用notifyAll()之后,插入新对象之前,dequeue已经唤醒,试
: 图去删除,这时队列仍然可能是空啊。
: public class BlockingQueue {
: private List queue = new LinkedList();
: private int limit = 10;
: public BlockingQueue(int limit){
: this.limit = limit;
: }
: public synchronized void enqueue(Object item)

m*****k
发帖数: 731
10
you forgot 'this' ?

【在 D**C 的大作中提到】
: wait 和 notify 都是要基于一个object的,这code根本就不会compile吧
r****c
发帖数: 2585
11
呵呵
应该是每看清楚method synchronization

【在 m*****k 的大作中提到】
: you forgot 'this' ?
1 (共1页)
进入JobHunting版参与讨论
相关主题
一道很难的面试题实现一个 thread-safe blocking queue这题怎么写啊?L家的常考
Two programming questions...怎么练习multi-threading,平常工作都是用Java框架
A家电面有没有Blocking Bounded Queue 用Pthread实现的Sample Code?
爆个L家面静吧请教一个系统设计问题 (转载)
thread safe blocking queue问题如何实现binary tree的从下到上的分层打印?
再问一个blockingqueue的问题share 面试题
thread-safe blockingqueue这个用stack实现queue
Java Blocking Queue问题求救: 打印binary tree
相关话题的讨论汇总
话题: dequeue话题: notifyall话题: object话题: public