gpt4 book ai didi

java - 监控队列 - ConcurrentLinkedQueue?

转载 作者:太空宇宙 更新时间:2023-11-04 11:53:14 25 4
gpt4 key购买 nike

我想实现一个监视器队列,两个不相关的线程可以共享它的附加内容。在这种情况下,仅使用 ConcurrentLinkedQueue 就足够了,还是我应该采取不同的做法?我想实现 Activity 对象设计模式,并且有 ActivationQueue - 它是普通的 Java 队列,必须作为监视器对象实现,因为除了队列之外还需要模式的其他组件。

最佳答案

如果您需要线程安全的队列,则 ConcurrentLinkedQueue对您来说可能就足够了,但如果您更需要线程安全的 BlockingQueue,您应该使用 LinkedBlockingQueue相反,为了满足此类需求,例如 wikipedia 上的模式 Activity 对象的实现示例.

class OriginalClass {

private double val = 0.0;

void doSomething() {
val = 1.0;
}

void doSomethingElse() {
val = 2.0;
}
}

class BecomeActiveObject {

private double val = 0.0;

private BlockingQueue<Runnable> dispatchQueue = new LinkedBlockingQueue<Runnable>();

public BecomeActiveObject() {
new Thread (new Runnable() {

@Override
public void run() {
while(true) {
try {
dispatchQueue.take().run();
} catch (InterruptedException e) {
// okay, just terminate the dispatcher
}
}
}
}
).start();
}

//
void doSomething() throws InterruptedException {
dispatchQueue.put(new Runnable() {
@Override
public void run() {
val = 1.0;
}
}
);
}

//
void doSomethingElse() throws InterruptedException {
dispatchQueue.put(new Runnable() {
@Override
public void run() {
val = 2.0;
}
}
);
}
}

关于java - 监控队列 - ConcurrentLinkedQueue?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41599783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com