ホームページ >Java >&#&チュートリアル >Java は、ThreadLocal クラスの get() 関数を使用して、スレッド ローカル変数の値を取得します。

Java は、ThreadLocal クラスの get() 関数を使用して、スレッド ローカル変数の値を取得します。

PHPz
PHPzオリジナル
2023-07-24 14:40:521865ブラウズ

Java は、ThreadLocal クラスの get() 関数を使用して、スレッド ローカル変数の値を取得します。

同時プログラミングでは、複数のスレッドが同じ変数にアクセスする可能性があるため、スレッドの安全性の問題を考慮する必要があります。この問題を解決するために、Java はスレッド間のデータ分離を実現できる ThreadLocal クラスを提供します。これにより、各スレッドが変数の独自のコピーを持つことが保証されます。 ThreadLocal クラスでは、get() 関数を使用して現在のスレッドのローカル変数値を取得できます。

ThreadLocal クラスを使用する前に、まずローカル変数とグローバル変数の違いを理解します。グローバル変数はプログラムの実行全体を通じてアクセスできる変数ですが、ローカル変数はそれが定義されているコード ブロック内でのみアクセスできます。グローバル変数にアクセスするときにスレッド セーフティの問題が発生する可能性がありますが、ローカル変数にはこの問題は存在しません。

以下は、ThreadLocal クラスの get() 関数を使用してスレッド ローカル変数の値を取得する方法を示す簡単な例です。

public class ThreadLocalDemo {
    private static final ThreadLocal<Integer> threadLocal = new ThreadLocal<>();

    public static void main(String[] args) {
        // 创建并启动两个线程
        Thread thread1 = new Thread(new MyRunnable());
        Thread thread2 = new Thread(new MyRunnable());
        thread1.start();
        thread2.start();
    }

    public static class MyRunnable implements Runnable {
        @Override
        public void run() {
            // 设置线程局部变量的值
            threadLocal.set((int) (Math.random() * 100));

            // 输出当前线程局部变量的值
            System.out.println("ThreadLocal value in " + Thread.currentThread().getName() + ": " + threadLocal.get());

            // 线程睡眠一段时间
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            // 输出当前线程局部变量的值(再次)
            System.out.println("ThreadLocal value in " + Thread.currentThread().getName() + " after sleep: " + threadLocal.get());

            // 清除线程局部变量
            threadLocal.remove();
        }
    }
}

上記のコードは、まず、各スレッドのローカル変数を格納する ThreadLocal オブジェクトを作成します。 MyRunnable の run() メソッドでは、ThreadLocal オブジェクトの set() 関数を呼び出して、現在のスレッドのローカル変数値を乱数に設定します。

次に、ThreadLocal オブジェクトの get() 関数を呼び出して、現在のスレッドのローカル変数値を取得し、コンソールに出力します。

サンプルの効率を高めるために、各スレッドで 1 秒間スリープさせます。 get() 関数を再度呼び出すと、スリープ後でも、各スレッドのローカル変数値が設定したばかりの乱数のままであることがわかります。

最後に、ThreadLocal オブジェクトの Remove() 関数を呼び出して、現在のスレッドのローカル変数をクリアします。

上記のコードを実行すると、次のような出力が表示されます。

ThreadLocal value in Thread-0: 42
ThreadLocal value in Thread-1: 96
ThreadLocal value in Thread-0 after sleep: 42
ThreadLocal value in Thread-1 after sleep: 96

各スレッドのローカル変数値が異なるスレッド間で分離されており、相互に影響を及ぼさないことがわかります。

ThreadLocal クラスの get() 関数を使用すると、現在のスレッドのローカル変数値を簡単に取得できるため、並行プログラミングでの変数共有とスレッド同期操作が簡素化されます。

以上がJava は、ThreadLocal クラスの get() 関数を使用して、スレッド ローカル変数の値を取得します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。