是否可以读取同一线程最后写入的值? [复制]

Posted

技术标签:

【中文标题】是否可以读取同一线程最后写入的值? [复制]【英文标题】:Is it possible to read the value last written by same thread? [duplicate] 【发布时间】:2021-09-08 00:26:42 【问题描述】:

在 Java 中是否可以确保变量的“读取”将给出由同一线程完全写入该变量的值(在多个并发“写入”操作的情况下)?

public class Client 
 private Config config;
 private RestClient client; 

 public void makeRequest() 
  client.post(config.getUrl(), requestEntity);
 

 public void setConfig(Config config) 
  this.config = config; 
 

我想确保' config.getUrl() '会给我准确的最后一个值('config'对象'的'url'变量)由同一线程前一段时间( config.setUrl(" someUrl") '发生在' config.getUrl() 在同一个线程中)。

但是有可能其他线程会同时调用config.setUrl("someOtherUrl")..

【问题讨论】:

【参考方案1】:

使用 ThreadLocal 存储线程特定的值。

看看ThreadLocals

例如,您可以像这样使用它们:

ThreadLocal<String> threadLocalValue = new ThreadLocal<>();
// Set the value of the url for this thread.
threadLocalValue.set("someUrl");
// Fetch the value again later like this.
String someUrl = threadLocalValue.get();

您存储在 ThreadLocal 中的值将仅适用于该特定线程。

【讨论】:

以上是关于是否可以读取同一线程最后写入的值? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

缓存不一致

多个 OpenMP 线程读取(不写入)共享变量的性能成本?

是否可以同时读取和写入 java.net.Socket?

c++ 当在一个线程中写入并在第二个线程中读取同一个对象时会发生啥? (它安全吗?)[重复]

在 C 或 C++ 中的同一个套接字上同时读取和写入

是否存在多个读取或写入线程的无锁队列?