真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

解決Java單線程ThreadLocal串值問(wèn)題

這篇文章主要為大家展示了解決Java單線程ThreadLocal串值問(wèn)題,內(nèi)容簡(jiǎn)而易懂,希望大家可以學(xué)習(xí)一下,學(xué)習(xí)完之后肯定會(huì)有收獲的,下面讓小編帶大家一起來(lái)看看吧。

創(chuàng)新互聯(lián)公司專注于網(wǎng)站建設(shè)|成都網(wǎng)站維護(hù)公司|優(yōu)化|托管以及網(wǎng)絡(luò)推廣,積累了大量的網(wǎng)站設(shè)計(jì)與制作經(jīng)驗(yàn),為許多企業(yè)提供了網(wǎng)站定制設(shè)計(jì)服務(wù),案例作品覆蓋廣告推廣等行業(yè)。能根據(jù)企業(yè)所處的行業(yè)與銷(xiāo)售的產(chǎn)品,結(jié)合品牌形象的塑造,量身開(kāi)發(fā)品質(zhì)網(wǎng)站。

ThreadLocal

ThreadLocal 適用于變量在線程間隔離,而在方法或類(lèi)間共享的場(chǎng)景。

代碼

@RestController
public class ThreadLocalController {
  private static final ThreadLocal currentUid = ThreadLocal.withInitial(() -> null);
  @GetMapping("bad")
  public Map doBad(@RequestParam("uid") String uid) {
    String before = currentUid.get();
    currentUid.set(uid);
    String after = currentUid.get();
    Map result = new HashMap();
    result.put("before", before);
    result.put("after", after);
    return result;
  }
}

在application中做一下tomcat的配置

server.tomcat.max-threads=1

運(yùn)行結(jié)果第一次

解決Java單線程ThreadLocal串值問(wèn)題

第二次

解決Java單線程ThreadLocal串值問(wèn)題

按理說(shuō)before總是null才對(duì),為什么第二次運(yùn)行卻讀取到了第一次的值呢?

只是因?yàn)槲覀兊膖ocat會(huì)開(kāi)啟一個(gè)線程來(lái)調(diào)用我們的程序,而tomcat本身是有線程池的,會(huì)出現(xiàn)線程復(fù)用的情況。所以導(dǎo)致了問(wèn)題。

修復(fù)

@RestController
public class ThreadLocalController {
  private static final ThreadLocal currentUid = ThreadLocal.withInitial(() -> null);
  @GetMapping("good")
  public Map doGood(@RequestParam("uid") String uid) {

    try {
      String before = currentUid.get();
      currentUid.set(uid);
      String after = currentUid.get();
      Map result = new HashMap();
      result.put("before", before);
      result.put("after", after);
      return result;
    } finally {
      currentUid.remove();
    }
  }
}

Key

tomcat線程池。

以上就是關(guān)于解決Java單線程ThreadLocal串值問(wèn)題的內(nèi)容,如果你們有學(xué)習(xí)到知識(shí)或者技能,可以把它分享出去讓更多的人看到。


新聞標(biāo)題:解決Java單線程ThreadLocal串值問(wèn)題
文章位置:http://weahome.cn/article/iiiopj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部