Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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_Jsp_Session - Fatal编程技术网

Java 复制线程的会话

Java 复制线程的会话,java,multithreading,jsp,session,Java,Multithreading,Jsp,Session,我需要有两个具有相同数据的会话。我怎样才能做到这一点 我的场景:用户在遍历站点时在会话中积累了一些数据。他们点击一个按钮,现在我发出一个线程来记录我得到了什么。不幸的是,我继承的代码传递会话ID并使用它访问数据。更不幸的是,此录制需要一些时间,因此用户经常点击其他页面,并将我正在录制的数据弄乱 用户需要一个可以继续玩的会话 我的线程需要一个不会改变的会话 理想情况下,我能够将会话数据复制到两个会话中,每个会话一个我真的希望有一个解决方案能够以某种方式提供这两个会话,因为重构代码将是一场噩梦。

我需要有两个具有相同数据的会话。我怎样才能做到这一点

我的场景:用户在遍历站点时在会话中积累了一些数据。他们点击一个按钮,现在我发出一个线程来记录我得到了什么。不幸的是,我继承的代码传递会话ID并使用它访问数据。更不幸的是,此录制需要一些时间,因此用户经常点击其他页面,并将我正在录制的数据弄乱

  • 用户需要一个可以继续玩的会话
  • 我的线程需要一个不会改变的会话
理想情况下,我能够将会话数据复制到两个会话中,每个会话一个我真的希望有一个解决方案能够以某种方式提供这两个会话,因为重构代码将是一场噩梦。我意识到这几乎是不可能的。我能想到的最接近的方法是复制数据,使会话无效,为用户重新创建会话,然后将无效的会话id传递给线程,希望它没有被清除,而不是我信任的计划

如果没有其他方法,请提出备选方案。优先考虑重构的速度;否则,整体优雅


关于实现的更多信息:线程发出大量请求,包括会话ID,每个请求根据会话中收集的数据生成一个PDF,该数据由线程合并到一个主文档中。

在您看来,我会在会话中存储一些数据对象。当需要启动线程来处理此数据时,可以克隆数据对象,而不是会话本身。当然,您必须编写一些代码来对该数据对象执行深度复制,但至少您的会话只是一个包装器(会话通常是这样的)


创建一个数据对象来存储线程所需的所有数据在某种程度上建立了某种“契约”,因此,如果任何其他开发人员需要添加或删除此数据对象中的任何内容,他/她将注意到深度复制方法也必须更新(希望如此).

如果会话中的对象是可变的,并且可能会被后续的用户操作修改,则会话的浅拷贝可能是不够的。你不能收集一组足够后台任务完成其工作的最少信息吗?与会话中的某些元素的数据结构相比,此线程中的进程需要实际会话是没有意义的。你们将如何使用会话ID处理请求?会话ID如何请求线程激发?这些人也需要访问数据。