使用时需要注意以下几点:- 线程之间的threadLocal变量是互不影响的 - 使用private final static进行修饰,防止多实例时内存的泄露问题 - 线程池环境下使用后将threadLocal变量remove掉或设置成一个初始值
而另外一种方式就是ThreadLocal方式,通过创建线程局部变量,以空间换时间的方式来让多线程并行执行。
原理:线程局部变量是局限于线程内部的变量,属于线程自身所有,不在多个线程间共享。但是在管理环境下(如 Web服务器)使用线程局部变量的时候要特别小心,在这种情况下,工作线程的生命周期比任何应用变量的生命周期都要长。
单纯使用 volatile 关键字是不能保证线程安全的 1. volatile 只提供了一种弱的同步机制,用来确保将变量的更新操作通知到其他线程 2. volatile 语义是禁用 CPU 缓存,直接从主内存读、写变量。表现为:更新 volatile 变量时,JMM 会把线程对应的本地内存中的共享变量值刷新到主内存中;
但是,实际中无法保证yield()达到让步目的,因为让步的线程还有可能被线程调度程序再次选中。在大多数情况下,yield()将导致线程从运行状态转到可运行状态,但有可能没有效果。线程从运行状态转到可运行状态,但有可能没有效果。