如何使用ArrayBlockingQueue <string>()初始化阻塞队列的大小以在另一个线程中显示get msg </string>

时间:2014-03-31 08:11:49

标签: java multithreading blockingqueue

BlockingQueue<String> queue = new ArrayBlockingQueue<String>(10);

for(int i=0; i<queue.size(); i++){
    queue[i] = new ArrayBlockingQueue<String>();
}

System.out.println("queue size in main "+queue.size());

***// queue.size() returning 0 why???***

Thread t2 = new Thread(new AccountTransaction(queue));
t2.start();
Thread t1 = new Thread(new BankInfo(queue));

2 个答案:

答案 0 :(得分:0)

您正在将queue初始化为ArrayBlockingQueue,但稍后会将其引用为BlockingQueue的数组。

那不会编译。

最重要的是,size方法将返回队列中的项目数,而不是其容量(您在构造函数中设置的容量)。

当您在代码中引用queue.size()时,它将返回0,因为队列中没有项目。

答案 1 :(得分:0)

在for循环的条件下,当你调用queue.size()时,它返回零并且循环终止而不运行正文。 System.out.println()的输出也调用queue.size(),它仍为零。尝试使用http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ArrayBlockingQueue.html#remainingCapacity()

@mena还提到你正在使用队列 - 一个集合 - 好像它是一个编译错误的数组。