Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

java threadlocal

作者:步尘の若云   发布日期:2025-05-09   浏览:36

// 定义一个 ThreadLocal 变量
public class ThreadLocalExample {

    // 创建一个 ThreadLocal 变量,每个线程都有自己独立的副本
    private static ThreadLocal<Integer> threadLocalValue = ThreadLocal.withInitial(() -> 0);

    public static void main(String[] args) throws InterruptedException {
        // 创建多个线程并启动它们
        Runnable task = () -> {
            // 获取当前线程的 ThreadLocal 值
            Integer value = threadLocalValue.get();
            System.out.println("Thread " + Thread.currentThread().getName() + " initial value: " + value);

            // 修改当前线程的 ThreadLocal 值
            threadLocalValue.set(value + 1);
            System.out.println("Thread " + Thread.currentThread().getName() + " updated value: " + threadLocalValue.get());
        };

        // 创建并启动多个线程
        Thread t1 = new Thread(task, "t1");
        Thread t2 = new Thread(task, "t2");

        t1.start();
        t2.start();

        t1.join();
        t2.join();
    }
}

解释说明

  1. ThreadLocal 的定义:

    • ThreadLocal<Integer> threadLocalValue = ThreadLocal.withInitial(() -> 0); 创建了一个 ThreadLocal 变量,并设置了初始值为 0。每个线程都会拥有自己独立的副本。
  2. 线程任务:

    • Runnable task 定义了一个线程任务,在这个任务中,每个线程会获取自己的 ThreadLocal 变量的值,并将其打印出来。
    • 然后每个线程会更新自己的 ThreadLocal 变量的值,并再次打印出来。
  3. 线程创建与启动:

    • 使用 new Thread(task, "t1")new Thread(task, "t2") 分别创建了两个线程 t1t2,并启动它们。
    • 使用 join() 方法确保主线程等待子线程执行完毕后再继续执行。

通过这种方式,ThreadLocal 可以确保每个线程都有自己独立的变量副本,避免了多线程环境下的数据竞争问题。

上一篇:java截取字符串方法

下一篇:java replace

大家都在看

java连接数据库的代码

ubuntu 卸载java

java sort用法

java collections.sort

java file类的方法

java 判断

java时间数据类型

java 时间加一天

java demo

java 截取

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站