多个HTTP请求安全的多线程Spring引导服务器

时间:2018-08-16 17:16:47

标签: java spring multithreading spring-boot static

在Spring引导服务器中,我的Rest控制器类是Multithreaded,许多线程共享(读和写)同一HTTP请求的变量。该程序对于1个HTTP请求是线程安全的。

但是我的程序中有一些静态变量,可用于在同一HTTP请求的Java线程之间共享信息。

我知道当多个HTTP请求一起到达时,这会造成问题。

我应该如何使程序/服务器同时接受多个HTTP请求,而又不弄乱2个不同HTTP请求的变量'logger','abc','xyz'?

一个人该如何声明和使用这些变量?

large

2 个答案:

答案 0 :(得分:2)

标准HTTP模型是每个请求一个线程。

新的响应式模型使用Netty和事件总线。

您完全知道,共享的可变数据是多线程访问的问题。您必须编写代码,以便它是线程安全的。使用java.util.concurrent包。

您犯了一个偏离选择模型的错误。聪明的人很难编写正确的多线程代码。

答案 1 :(得分:0)

Spring有一些功能可以帮助解决此问题,但是由于您尚未共享用例,因此很难提出建议... 要解决此特定问题,您还可以使用不使用锁的AtomicReference。 这是有关如何使用它的很好的教程: http://tutorials.jenkov.com/java-util-concurrent/atomicreference.html