Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.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_Multithreading_Web Services_Servlets_Jax Rs - Fatal编程技术网

Java线程调用公共数据收集器对象上的方法是否可能?

Java线程调用公共数据收集器对象上的方法是否可能?,java,multithreading,web-services,servlets,jax-rs,Java,Multithreading,Web Services,Servlets,Jax Rs,想法:我有一个JAX-RS webservice servlet(称为webServlet的对象),它实例化一个数据收集对象dataCollector,并将该对象传递给其构造函数中的多个线程。这些线程查询网站的结果,然后调用dataCollector.add(result)方法将结果添加到共享dataCollector中的队列中 关于这个想法,我有两个问题: 1) 多个线程可以同时调用单个共享对象的方法吗 2) 当终止所有线程以呈现结果页时,我的webServlet对象如何检查?我是否必须让我的

想法:我有一个JAX-RS webservice servlet(称为
webServlet
的对象),它实例化一个数据收集对象
dataCollector
,并将该对象传递给其构造函数中的多个线程。这些线程查询网站的结果,然后调用
dataCollector.add(result)
方法将结果添加到共享
dataCollector
中的队列中

关于这个想法,我有两个问题:

1) 多个线程可以同时调用单个共享对象的方法吗

2) 当终止所有线程以呈现结果页时,我的
webServlet
对象如何检查?我是否必须让我的
webServlet
在所有线程运行时等待,以便我有一个完整的结果列表,以及我将如何做到这一点?

1)是的,但可能不安全。特别是,如果dataCollector中的队列不是线程安全的队列(如),则当线程对其调用add()时,您将面临线程安全的风险

2) a)使用(可能从中获得)至或。保留返回的文件,并用于等待工作完成

b) 你不必这么做。选择权在你。如果您在工作完成之前发送响应,显然您还没有得到完整的结果

c) 见a)


如果这对您来说都是新的,您可能想签出。

我的dataCollector不是ConcurrentLinkedQueue,而是一个普通对象,它提供了更多功能,如验证要添加到队列中的数据,这会有问题吗?或者我的对象是线程安全的,因为它使用线程安全队列吗?@Jack:我想说的是,dataCollector中的队列必须是线程安全的,否则你注定会失败。即使是这样,如果您不完全熟悉跨线程共享资源的含义,也可能会得到一些令人惊讶的结果。是的,谢谢您,实际上我遇到了令人惊讶的结果,因为我对跨线程共享资源一点也不熟悉。我在那边问了一个更具体的问题。如果有/没有意义,请告诉我:)