在针对多线程系统的Queue实现时,我遇到了一些惊喜.这是:-
场景: - 1个生产者,1个消费者: - 生产者将整数放入队列中.消费者只是将其从队列中删除.
队列的基础数据结构: - TreeSet(我从未想过会使用),LinkedList,LinkedBlockingQueue(具有不确定的大小)
代码: - TreeSet作为队列: -
while (i < 2000000) {
synchronized (objQueue) {
if (!(objQueue.size() > 0)) {
try {
objQueue.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Integer x = objQueue.first();
if (x != null) {
objQueue.remove(x);
++i;
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:-
while (i < 2000000) {
synchronized (objQueue) {
objQueue.add(i);
++i;
objQueue.notify();
}
}
Run Code Online (Sandbox Code Playgroud)
对于LinkedBlockingQueue: -
while (i < 2000000){
try {
objQueue.put(i);
++i; …Run Code Online (Sandbox Code Playgroud)