目前,我有一个算法,看起来有点像网页蜘蛛或文件搜索系统,它有一个元素集合来处理,处理元素可以导致排队更多的元素。
但是,这个算法是单线程的--这是因为我从db中获取数据,并且希望一次只有一个db连接。在我目前的情况下,性能并不重要--我这样做只是为了可视化,以简化调试。
对我来说,使用队列抽象似乎很自然,但是使用队列似乎意味着多线程--据我所知,大多数标准的java队列实现驻留在java.util.concurrent包中。

我知道我可以继续使用任何支持拉和推的数据结构,但是我想知道在这种情况下使用哪种数据结构更自然(在单个线程应用程序中使用队列可以吗?)
发布于 2012-06-26 12:13:42
队列在java.util中定义。LinkedList是一个队列,不太适合并发。队列方法中没有一个阻塞,所以从单个线程的角度来看,它们应该是安全的。
发布于 2012-06-26 12:01:33
使用单线程的java.util.concurrent结构基本上是很好的。
要注意的主要事情是阻塞呼叫。如果您使用有界大小的结构(如ArrayBlockingQueue ),并且在一个已满的队列上调用put方法,则调用线程将阻塞,直到队列中有空间。如果使用任何类型的队列,并且在队列为空时调用take,则调用线程将阻塞,直到队列中出现某些内容。如果您的应用程序是单线程的,那么这些事情永远不会发生,所以这意味着永远阻塞。
为了避免put阻塞,可以使用像LinkedBlockingQueue这样的无界结构。若要避免删除时阻塞,请使用非阻塞操作--如果队列为空,remove将抛出异常,而poll返回null。
话虽如此,Queue接口的一些实现并不在java.util.concurrent中。ArrayDeque可能是一个不错的选择。
发布于 2012-06-26 12:01:49
可以在单个线程应用程序中使用任何队列。在没有并发线程的情况下,同步开销应该可以忽略不计,并且只有在元素处理时间非常短的情况下才会引起注意。
https://stackoverflow.com/questions/11206786
复制相似问题