`
firkeuuuu
  • 浏览: 18655 次
社区版块
存档分类
最新评论

ThreadLocal共享变量2

    博客分类:
  • java
阅读更多
import java.util.Random;

public class ThreadLocalTest {
    private static ThreadLocal<Integer> x = new ThreadLocal();

    public static void main(String[] args) {
        for (int i = 0; i < 2; i++) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    int data = new Random().nextInt();
                    System.out.println(Thread.currentThread().getName() + ":" + data);
                    MyThreadScopeData.getInstance().setName(data+"");
                    MyThreadScopeData.getInstance().setAge(data);
                    new A().get();
                    new B().get();

                }
            }).start();
        }
    }

    static class A{
        public void get(){
            System.out.println(Thread.currentThread().getName() + ":" + MyThreadScopeData.getInstance().getName() + " " + MyThreadScopeData.getInstance().getAge());
        }
    }
    static class B{
        public void get(){
            System.out.println(Thread.currentThread().getName() + ":" + MyThreadScopeData.getInstance().getName() + " " +  MyThreadScopeData.getInstance().getAge());
        }
    }
}

class MyThreadScopeData{
    private String name;
    private int age;
    private MyThreadScopeData(){

    }
    public static MyThreadScopeData getInstance(){
        MyThreadScopeData instance= map.get();
        if(instance == null){
            instance = new MyThreadScopeData();
            map.set(instance);
        }
        return instance;
    }
    private static ThreadLocal<MyThreadScopeData> map = new ThreadLocal<>();

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

 

分享到:
评论

相关推荐

    18 线程作用域内共享变量—深入解析ThreadLocal.pdf

    【线程作用域内共享变量】 在Java并发编程中,线程安全是一个重要的主题。传统的解决方案包括使用`Atomic`类、`volatile`关键字以及`synchronized`关键字来保证多线程环境下的数据一致性。然而,这些同步机制并不...

    ThreadLocal应用示例及理解

    - ThreadLocal不是线程同步机制,不能用来解决多个线程访问共享资源的问题。 - 不要将ThreadLocal用作全局变量,否则可能导致内存泄漏。 - 使用ThreadLocal时,要特别注意线程结束后的清理工作,防止内存泄漏。 - ...

    ThreadLocal

    - 不适用于跨线程通信:ThreadLocal只保证同一线程内的数据隔离,不同线程间无法共享ThreadLocal变量。 - 不是线程安全的:尽管ThreadLocal提供了线程隔离,但它本身并不保证线程安全性,如果在`set`和`get`操作之间...

    正确理解ThreadLocal.pdf

    2. **事务处理**:在事务管理中,`ThreadLocal`可以用于维护每个线程的事务状态,确保事务的完整性和一致性。 3. **日志记录**:在多线程环境中,`ThreadLocal`可以用于维护每个线程的日志上下文,如线程ID、用户名...

    ThreadLocal简单Demo

    2. **内部类ThreadLocalMap**: `ThreadLocalMap`是`ThreadLocal`类中的一个内部静态类,它是一个定制的哈希映射,专门用于存储线程局部变量。每个`Thread`对象都包含一个`ThreadLocalMap`实例,用于保存该线程的`...

    Java并发编实践之ThreadLocal变量.doc

    2. `public T get()`: 这个方法获取当前线程副本中的变量值。如果当前线程还没有分配值,那么会调用`initialValue()`进行初始化。 3. `public void set(T value)`: 用指定的`value`来设置当前线程的ThreadLocal变量...

    Java中ThreadLocal的设计与使用

    静态成员变量是所有线程共享的,而ThreadLocal变量为每个线程提供独立的副本。这使得ThreadLocal适合于存储线程私有数据,如数据库连接、用户会话信息等。 ### ThreadLocal的最佳实践 1. **避免过度使用**:虽然...

    ThreadLocal相关

    当多个线程访问同一个 ThreadLocal 变量时,每个线程将拥有其自己的变量副本,而不是共享同一个变量。 ThreadLocal 的特点 1. 线程独立:ThreadLocal 变量在线程之间是独立的,每个线程都有其自己的变量副本。 2. ...

    Java多线程编程之ThreadLocal线程范围内的共享变量

    总结来说,ThreadLocal是Java中用于多线程编程的一种重要工具,它通过为每个线程提供独立的变量副本,解决了共享变量带来的问题,同时在特定场景下提供了高效的数据管理和事务一致性。了解并合理利用ThreadLocal,能...

    ThreadLocal的用处

    2. **创建和访问变量**: 创建ThreadLocal变量非常简单,只需定义一个ThreadLocal类型的实例即可。例如: ```java ThreadLocal&lt;String&gt; threadLocalVar = new ThreadLocal(); ``` 要访问或设置线程局部变量的值...

    ThreadLocal原理及在多层架构中的应用

    ThreadLocal不是一种数据结构,而是一种解决线程间共享数据的方式,它提供了线程安全的局部变量。** ### 1. ThreadLocal的原理 ThreadLocal的工作原理主要基于以下几点: - **内部类ThreadLocalMap**:...

    ThreadLocal 线程本地变量 及 源码分析.rar_开发_设计

    - 不要将ThreadLocal用作全局变量,因为它们只在创建它们的线程内有效,无法跨线程共享。 - 谨慎处理生命周期管理,尤其是在静态变量中使用ThreadLocal,确保在不再需要时正确清理,防止内存泄漏。 6. **应用场景...

    ThreadLocal的几种误区

    ThreadLocal是Java编程中一种非常特殊的变量类型,它主要用于在多线程环境下为每个线程提供独立的变量副本,从而避免了线程间的数据共享和冲突。然而,ThreadLocal在理解和使用过程中容易产生一些误区,这里我们将...

    ThreadLocal_ThreadLocal源码分析_

    3. **谨慎使用全局ThreadLocal**:全局的ThreadLocal变量可能导致数据在不同线程间意外共享,应谨慎使用。 4. **注意线程池中的ThreadLocal**:线程池中的线程可能会被重用,若不清理ThreadLocal,可能导致后续任务...

    Java并发编程学习之ThreadLocal源码详析

    ThreadLocal是Java并发编程中的一种机制,用于解决多线程访问共享变量的问题。它可以使每个线程对共享变量的访问都是线程安全的,使得多线程编程变得更加简单。 ThreadLocal的实现原理是基于ThreadLocalMap的, ...

    java 简单的ThreadLocal示例

    Java中的ThreadLocal是一个非常重要的工具类,它在多线程编程中扮演着独特角色,尤其在处理线程间数据隔离和共享时。ThreadLocal不是线程本身,而是为每个线程提供一个独立的变量副本,使得每个线程都可以独立地改变...

    使用ThreadLocal管理“session”数据

    ThreadLocal主要用于解决线程间的数据隔离问题,确保各线程拥有自己的变量副本,避免了数据共享带来的并发问题。在Web应用中,特别是对于"session"数据的管理,ThreadLocal可以作为一种有效的解决方案。 1. **什么...

    java中ThreadLocal详解

    通常情况下,当多个线程共享某个变量时,可能会引发线程安全问题。而`ThreadLocal`则提供了另一种思路:为每个使用该变量的线程分配独立的副本,这样一来,每个线程拥有自己的变量副本,互不影响,从而避免了线程...

Global site tag (gtag.js) - Google Analytics