我想我做错了。我正在创建假设从共享队列中处理一些数据的线程。我的问题是程序很慢而且内存占用很大,我怀疑队列可能不像我希望的那样共享。我怀疑这是因为在我的代码中我添加了一条显示队列大小的行,如果我启动 2 个线程,那么我会得到两个具有完全不同数字的输出,并且似乎会自行增加(我认为它可能是相同的数字,但也许它从 100 跳到 2 等等,但在观看后显示 105 和 5 并且以不同的速率运行。如果我有 4 个线程,那么我会看到 4 个不同的数字)。
这是相关部分的片段。我在程序顶部的队列中创建了一个带有我想要的数据的静态类
static class queue_class {
int number;
int[] data;
Context(int number, int[] data) {
this.number = number;
this.data = data;
}
}
然后我在向可调用对象发送一些作业后创建队列..
static class process_threaded implements Callable<Void> {
// queue with contexts to process
private Queue<queue_class> queue;
process_threaded(queue_class request) {
queue = new ArrayDeque<queue_class>();
queue.add(request);
}
public Void call() {
while(!queue.isEmpty()) {
System.out.println("in contexts queue with a size of " + queue.size());
Context current = contexts.poll();
//get work and process it, if it work great then the solution goes elsewhere
//otherwise, depending on the data, its either discarded or parts of it is added back to queue
queue.add(new queue_class(k, data_list));
如您所见,数据有 3 个选项,如果数据良好则发送出去,如果数据非常糟糕则丢弃或发送回队列。我认为队列在被发回时正在运行,但我怀疑是因为每个线程都在自己的队列上工作,而不是共享队列。
这个猜测正确吗?我做错了吗?