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



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

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

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

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

必须如何声明和使用这些变量?

@RestController 
public class ABC {
private static final Logger logger = LoggerFactory.getLogger(ABC.class);
private static volatile byte[] abc = null;
static volatile boolean xyz = "true"

// Multithreaded program where multiple threads read and write 
both 'abc'  and 'xyz'

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

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

您非常清楚,共享的可变数据是多线程访问的问题。 您必须编写代码,使其线程安全。 使用java.util.concurrent包。

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

Spring 有一些功能可以帮助解决这个问题,但很难建议,因为你还没有分享你的用例...... 为了解决这个特殊问题,你也可以使用AtomicReference的,它不使用锁。 这里有一个关于如何使用它的好教程: http://tutorials.jenkov.com/java-util-concurrent/atomicreference.html

最新更新