我想在排队之前检查一个对象是否在队列中.如果没有明确定义EqualityComparer,那么Contains()函数会比较什么?
如果它比较属性值,那就完美了.如果它比较以查看队列中是否存在对该对象的引用,那么就会破坏我在代码中尝试完成的操作.
我有一个要处理的事件队列.线程将事件添加到队列中.
我创建了一个可运行的Task,在该run方法中执行处理事件所需的所有操作.
我已经宣布了Executors.newCachedThreadPool();我和execute每个任务.
public class EventHandler {
private static final ExecutorService handlers = Executors.newCachedThreadPool();
public void handleNextEvent(AnEvent event){
handlers.execute(new Task(evt));
}
public class Task implements Runnable{
@Override
public void run() {
//Event processing
}
}
public AnotherClass{
public void passEvent(AnEvent evt)//This is called by another thread
{
EventHandler.handleNextEvent(evt);
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果我调用execute执行程序,我的代码将获得下一个事件并通过执行程序运行下一个runnable.我的目的是仅在上一个任务结束后才从队列中处理下一个事件.
我怎么知道前一个任务已经完成,所以我知道我可以再次调用handleNextEvent?
是否有一个状态字段由任务更新一个好主意?
谢谢
假设某些应用程序需要使用两个元素属于同一类型的堆栈.这种双栈数据类型的自然存储结构将由两个阵列和两个顶部指针组成.解释为什么这可能不是一个空间有效的实现.
我正在尝试构建一个可用于管理多个数据集的队列队列,但我不确定如何.只是delaring queue<queue>不起作用并返回以下错误:
error: type/value mismatch at argument 1 in template parameter list for ‘template<class Type> class queue’
main.cpp:18: error: expected a type, got ‘queue’
main.cpp:18: error: invalid type in declaration before ‘;’ token
make: *** [main.o] Error 1
Run Code Online (Sandbox Code Playgroud)
是否有可能实现这种数据结构,如果是这样,我该怎么做呢?
注意:这是一个类赋值,我们需要自己对队列进行编码,而不是使用标准模板库.
客户使用Python 2.5.5使用我的软件出现此错误.怎么会这样?_empty是否已从队列中消失?我根本不明白这一点.我没有从队列继承,只有Queue类的正常实例.在我的机器上似乎一切正常,但是,在客户的机器上出现了错误.任何人都可以给我一些建议,问题是什么?
这个问题发生在这里:
import Queue
self.requests.mutex.acquire()
allCount = self.requests._qsize()
while not self.requests._empty():
try:
(sock, addr, _) = self.requests._get()
# ... do some things
self.requests.mutex.release()
Run Code Online (Sandbox Code Playgroud)
之前,队列已初始化
self.requests = Queue(self.reqQLen)
Run Code Online (Sandbox Code Playgroud)
并且这些队列方法也用在模块中:put_nowait,qsize,get.队列用于多线程的上下文中.这可能是原因吗?
我想知道:错误消息告诉我变量请求被识别为队列实例,但属性_empty不存在.但是,这是Queue类中的常规方法.
我最近开始使用Threads,我正在尝试在Android中完成Looper类的Java实现.基本上我正在创建一个Java类,它将线程放入一个队列,然后由Looper类执行.我已经完成了大部分代码但是在排队任务时遇到了问题.
在Looper类中,我声明了队列和我的入队方法:
List<Runnable> queue;
public synchronized void enqueue(Runnable runnable) {
queue.add(runnable);
notify(); // signal a waiting thread
}
Run Code Online (Sandbox Code Playgroud)
然后我创建了另一个名为TaskManager的类来将Tasks添加到队列中.我打电话时收到错误:
loop.enqueue(new Task());
Run Code Online (Sandbox Code Playgroud)
其中Task()实现了runnable,只是在run()方法中将两个整数相加......这只是一个测试.
我收到的错误是:
Exception in thread "Thread-0" java.lang.NullPointerException
at Looper.enqueue(Looper.java:20) (this is the queue.add(runnable))
at TaskMaker.run(TaskMaker.java:16) (this is the loop.enqueue(new Task())
Run Code Online (Sandbox Code Playgroud)
我显然做错了什么并没有实现这个......我该怎么做呢?我排队的任务是正确的吗?感谢您的帮助,非常感谢!
我已经编写了自己的Stack和Queue实现,但我已经使它们专门用于整数.我深知Java实现的,java.util.Stack和java.util.Queue,但我这样做是为学习经验......只是想学习新的东西.我如何制作这些通用实现,以便我可以在Stack/Queue中存储任何对象,而不仅仅是整数?
以下是代码,但我也欢迎所有关于改进的批评和建议.我想知道我做得很好以及我做得不好.
public class StackNode {
public Integer value;
public StackNode() {
this.value = null;
}
public StackNode(StackNode node) {
this.value = node.value;
}
public StackNode(Integer data) {
this.value = data;
}
}
Run Code Online (Sandbox Code Playgroud)
/**
* Stack Data Structure.
*
* A Stack is a last in, first out (LIFO) data structure. A Stack can have any abstract data type as an element, but is
* characterized by two fundamental operations: …Run Code Online (Sandbox Code Playgroud) 我试图在Java中使用PriorityQueue.
我有一些自定义对象,我以这种方式将它们添加到队列中:
Pet pet1 = new Pet();
Pet pet2 = new Pet();
Pet pet3 = new Pet();
PriorityQueue<Pet> queue = new PriorityQueue<Pet>();
queue.offer(pet1);
queue.offer(pet2);
queue.offer(pet3);
Run Code Online (Sandbox Code Playgroud)
此时,我意识到我的Pet对象必须实现Comparable才能从PriorityQueue获取ClassCastException.所以我让我的Pet实现Comparable,然后只返回0覆盖copmareTo(obj)方法.
但奇怪的是这里.当我...
queue.poll(); //return: pet1 queue: pet3, pet2
queue.poll(); //return: pet3 queue: pet2
Run Code Online (Sandbox Code Playgroud)
因为我按照pet1,pet2和pet3的顺序添加了它们,为什么在我第一次调用poll()时,它会对我的宠物序列进行排序?然后整个事情变得不再是一个队列,因为它的输入序列没有被保留,不是吗?
我怀疑它可能与Comparable接口和compareTo(obj)方法有关.但我所需要的只是保持其输入序列,所以我真的不需要比较任何东西或任何东西.
如何在队列中维护其输入序列?
谢谢!