読者も、インターネット上で ThreadLocal に関する多くの情報を読んでいると思います。ThreadLocal は、マルチスレッド プログラムの同時実行性の問題を解決するための新しい考え方を提供します。マルチスレッドアクセスの問題を解決します。そう思うなら、ThreadLocal に関するこれまでの誤解を解くために 10 秒ほど時間をください。
JDK のソースコードがどのように書かれているかを見てください:
This class provides thread-local variables. These variables differ from their normal counterparts in that each thread that accesses one (via its {@code get} or {@code set} method) has its own, independently initialized copy of the variable. {@code ThreadLocal} instances are typically private static fields in classes that wish to associate state with a thread (e.g., a user ID or Transaction ID).
翻訳はおおよそ次のとおりです (英語はうまくありません。もっと良い翻訳があればメッセージを残してください):
ThreadLocal クラスは次のようなものを提供するために使用されますスレッド内のローカル変数。この種の変数がマルチスレッド環境でアクセスされる (get または set メソッドを通じてアクセスされる) 場合、各スレッドの変数が他のスレッドの変数から相対的に独立していることが保証されます。 ThreadLocal インスタンスは通常、プライベート静的タイプであり、スレッドとスレッド コンテキストを関連付けるために使用されます。
は 1 つの文に要約できます: ThreadLocal の機能は、スレッド内でローカル変数を提供することであり、そのような変数はスレッドのライフサイクル内で機能し、同じ内の複数の関数またはコンポーネント間でいくつかのパブリック変数を渡す複雑さを軽減します。スレッドを費やします。
たとえば、外出するとき、最初にバスに乗り、次に地下鉄に乗る必要があります。ここでバスに乗るのと地下鉄に乗るのは、同じスレッド内の 2 つの機能です。同じ機能が必要です: バス カード (北京のバスと地下鉄はバス カードを使用します)。バス カード変数を両方の機能に渡さないようにするには (バス カードを常に道路に持ち歩かないのと同じです)、次のようにします。 : バスカードの変更 事前にバスカードを代理店に渡し、カードを通す必要がある場合は、この代理店にバスカードを要求します(もちろん毎回同じバスカードを受け取ります)。このようにして、私(同じスレッド)がバスカードを必要としている限り、いつでもどこでもこの組織にカードを要求することができます。
誰かが言いました: バス カードをグローバル変数として設定できるので、いつでもどこでもバス カードを取得できますよね?しかし、多数の個人 (多数のスレッド) がある場合はどうなるでしょうか?全員が同じバス カードを使用することはできません (バス カードは実名で認証されていると仮定します)。そうしないと混乱を招きます。もう分かりましたか?これは ThreadLocal の設計の本来の目的です。他のスレッドを分離しながら、このスレッド内でいつでもどこでもアクセスできるローカル変数をスレッド内に提供することです。
(1) ThreadContext
このクラスはスレッドローカル変数を提供します。 これらの変数は、(get メソッドまたは set メソッドを介して) スレッドにアクセスする各スレッドが独自に初期化された変数のコピーを持つという点で通常の変数とは異なります。
ThreadLocal インスタンスは通常、状態をスレッド (例: ユーザー ID またはトランザクション ID) に関連付けたいクラスのプライベート静的フィールドです。 各スレッドには、スレッド ローカル変数のコピーへの暗黙的な参照があります。
スレッドが生きている限り、1 つのスレッドが終了した後、そのスレッドのすべてのコピーに ThreadLocal インスタンスにアクセスできます。ローカル インスタンスはガベージ コレクションされます (他の参照が存在しない場合)。
一般的に使用されるメソッドは次のとおりです。
1 public class ThreadLocal<t> { 2 3 //设置属性 4 5 public void set(T value) { 6 Thread t = Thread.currentThread(); 7 ThreadLocalMap map = getMap(t); 8 if (map != null) 9 map.set(this, value);10 else11 createMap(t, value);12 }13 14 //获取属性15 16 public T get() {17 Thread t = Thread.currentThread();18 ThreadLocalMap map = getMap(t);19 if (map != null) {20 ThreadLocalMap.Entry e = map.getEntry(this);21 if (e != null)22 return (T)e.value;23 }24 return setInitialValue();25 }26 27 //获取线程的 ThreadLocal.ThreadLocalMap28 29 ThreadLocalMap getMap(Thread t) {30 return t.threadLocals;31 }32 33 }34 35 //新建一个线程本地的localMap36 37 void createMap(Thread t, T firstValue) {38 t.threadLocals = new ThreadLocalMap(this, firstValue);39 }</t>
(2) 使用例: 接続とセッションは次のとおりです。
以上がThreadLocal はマルチスレッド プログラムの例を解決しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

如图所示:快速开始接下来我们就先用一个简单的样例给大家展示一下ThreadLocal的基本用法packagecuit.pymjl.thradlocal;/***@authorPymjl*@version1.0*@date2022/7/110:56**/publicclassMainTest{staticThreadLocalthreadLocal=newThreadLocal();staticvoidprint(Stringstr){//打印当前线程中本地内存中本地变量的值System.out.

线程封闭线程封闭一般通过以下三个方法:Ad-hoc线程封闭:程序控制实现,最糟糕,忽略堆栈封闭:局部变量,无并发问题ThreadLocal线程封闭:特别好的封闭方法方法2是最常用的,变量定义在接口内,本文主要讲解方法三,SpringBoot项目通过自定义过滤器和拦截器实现ThreadLocal线程封闭。实现Filter接口自定义过滤器和继承HandlerInterceptorAdapter自定义拦截器。ThreadLocal线程封闭实现步骤封装ThredLocal的方法/***自定义Reques

作为一名Java开发者,学习和使用Spring框架已经是一项必不可少的技能。而随着云计算和微服务的盛行,学习和使用SpringCloud成为了另一个必须要掌握的技能。SpringCloud是一个基于SpringBoot的用于快速构建分布式系统的开发工具集。它为开发者提供了一系列的组件,包括服务注册与发现、配置中心、负载均衡和断路器等,使得开发者在构建微

Java利用ThreadLocal类的get()函数获取线程局部变量的值在并发编程中,多个线程可能会访问同一个变量,这时需要考虑线程安全的问题。为了解决这个问题,Java提供了ThreadLocal类,它可以实现线程间的数据隔离,从而保证每个线程都有自己的变量副本。在ThreadLocal类中,我们可以使用get()函数来获取当前线程的局部变量值。在使用Th

1前言注册登录可以说是平时开发中最常见的东西了,但是一般进入到公司之后,像这样的功能早就开发完了,除非是新的项目。这两天就碰巧遇到了这样一个需求,完成pc端的注册登录功能。实现这样的需求有很多种方式:像1)HandlerInterceptor+WebMvcConfigurer+ThreadLocal2)Filter过滤器3)安全框架Shiro(轻量级框架)4)安全框架SpringSecurety(重量级框架)而我采用的是第一种SpringHandlerInterceptor+WebMvcConf

win7系统自带有备份还原系统的功能,如果之前有给win7系统备份的话,当电脑出现系统故障的时候,我们可以尝试通过win7还原系统修复。那么win7怎么还原系统呢?下面小编就教下大家如何还原win7系统。具体的步骤如下:1、开机在进入Windows系统启动画面之前按下F8键,然后出现系统启动菜单,选择安全模式登陆即可进入。2、进入安全模式之后,点击“开始”→“所有程序”→“附件”→“系统工具”→“系统还原”。3、最后只要选择最近手动设置过的还原点以及其他自动的还原点都可以,但是最好下一步之前点击

随着Web应用程序的需求越来越高,PHP技术在开发领域中变得越来越重要。在PHP开发方面,测试是一个必要的步骤,它可以帮助开发者确保他们创建的代码在各种情况下都可靠和实用。在PHP中,一个流行的测试框架是PHPUnit。PHPUnit是一个基于Junit的测试框架,其目的是创建高质量、可维护和可重复的代码。下面是一些学习使用PHPUnit框架的基础知识和步骤

随着计算机性能的提高,多线程编程变得越来越普遍。Java中的多线程编程是一个强大的特性,允许我们同时执行多个任务。在多线程编程中,线程局部变量(ThreadLocal)函数是一种非常有用的机制,可以使每个线程都拥有自己的变量副本,从而避免线程之间的竞争和数据污染问题。在本文中,我们将讨论如何在Java中使用ThreadLocal函数进行线程局部变量操作。Th


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

Dreamweaver Mac版
ビジュアル Web 開発ツール

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

メモ帳++7.3.1
使いやすく無料のコードエディター

ホットトピック



