Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 多线程是队列契约的一部分吗?_Java_Data Structures_Queue - Fatal编程技术网

Java 多线程是队列契约的一部分吗?

Java 多线程是队列契约的一部分吗?,java,data-structures,queue,Java,Data Structures,Queue,目前,我有一个算法,看起来有点像网络蜘蛛或文件搜索系统——它有一个要处理的元素集合,处理元素会导致更多元素排队 然而,这个算法是单线程的——这是因为我从数据库中获取数据,并且希望一次只有一个数据库连接。 在我目前的情况下,性能并不重要——我这样做只是为了可视化,以简化调试 对我来说,使用队列抽象似乎很自然,但使用队列似乎意味着多线程——据我所知,大多数标准java队列实现都驻留在java.util.concurrent包中 我知道我可以继续使用任何支持pull和push的数据结构,但我想知道在

目前,我有一个算法,看起来有点像网络蜘蛛或文件搜索系统——它有一个要处理的元素集合,处理元素会导致更多元素排队

然而,这个算法是单线程的——这是因为我从数据库中获取数据,并且希望一次只有一个数据库连接。 在我目前的情况下,性能并不重要——我这样做只是为了可视化,以简化调试

对我来说,使用队列抽象似乎很自然,但使用队列似乎意味着多线程——据我所知,大多数标准java队列实现都驻留在java.util.concurrent包中


我知道我可以继续使用任何支持pull和push的数据结构,但我想知道在这种情况下使用哪种数据结构更自然(在单线程应用程序中使用队列可以吗?)。

基本上可以在单线程中使用
java.util.concurrent
结构

要注意的主要问题是阻止通话。如果使用有界大小的结构(如),并且在已满的队列上调用该方法,则调用线程将阻塞,直到队列中有空间为止。如果您使用任何类型的队列,并且在其为空时调用,则调用线程将阻塞,直到队列中有内容为止。若您的应用程序是单线程的,那个么这些事情永远不会发生,所以这意味着永远阻塞

为了避免
put
阻塞,您可以使用像。为了避免移除时阻塞,请使用非阻塞操作-如果队列为空,则引发异常,并返回null


话虽如此,该接口的一些实现并不在
java.util.concurrent
中。这可能是一个不错的选择。

基本上可以使用带有单个线程的
java.util.concurrent
结构

要注意的主要问题是阻止通话。如果使用有界大小的结构(如),并且在已满的队列上调用该方法,则调用线程将阻塞,直到队列中有空间为止。如果您使用任何类型的队列,并且在其为空时调用,则调用线程将阻塞,直到队列中有内容为止。若您的应用程序是单线程的,那个么这些事情永远不会发生,所以这意味着永远阻塞

为了避免
put
阻塞,您可以使用像。为了避免移除时阻塞,请使用非阻塞操作-如果队列为空,则引发异常,并返回null


话虽如此,该接口的一些实现并不在
java.util.concurrent
中。可能是个不错的选择。

在单线程应用程序中使用任何队列都可以。在没有并发线程的情况下,同步开销应该可以忽略不计,并且只有在元素处理时间非常短的情况下才值得注意。

在单线程应用程序中使用任何队列都可以。在没有并发线程的情况下,同步开销应该可以忽略不计,并且只有在元素处理时间非常短的情况下才值得注意。

队列在java.util中定义。LinkedList是一个队列,对并发性不太友好。没有队列方法阻塞,因此从单线程的角度来看,它们应该是安全的。

队列在java.util中定义。LinkedList是一个队列,对并发性不太友好。没有任何队列方法阻塞,因此从单线程的角度来看,它们应该是安全的。

如果要使用带有线程池的队列,我建议使用一个将两者结合在一起的。默认情况下,ExecutorService使用LinkedBlockingQueue


如果要使用带有线程池的队列,我建议使用一个将两者结合起来的。默认情况下,ExecutorService使用LinkedBlockingQueue