Java并发性ThreadLocal类 Java并发性死锁 Java并发ThreadLocalRandom类 ThreadLocal类用于创建只能由同一个线程读写的线程局部变量。例如,如果两个线程正在访问引用相同threadLocal变量的代码,则每个线程都不会看到由其他线程完成的threadLocal变量的任何修改。 ThreadLocal方法 以下是ThreadLocal类中可用的重要方法的列表。 Sr.No. 方法和描述 1 public T get() 返回此线程局部变量的当前线程副本中的值。 2 protected T initialValue() 返回此线程局部变量的当前线程的“初始值”。 3 public void remove() 删除此线程局部变量的当前线程值。 4 public void set(T value) 将此线程局部变量的当前线程副本设置为指定的值。 例 下面的TestThread程序演示了ThreadLocal类的一些方法。这里我们使用了两个计数器变量,一个是普通变量,另一个是ThreadLocal。 class RunnableDemo implements Runnable { int counter; ThreadLocal<Integer> threadLocalCounter = new ThreadLocal<Integer>(); public void run() { counter++; if(threadLocalCounter.get() != null) { threadLocalCounter.set(threadLocalCounter.get().intValue() + 1); } else { threadLocalCounter.set(0); } System.out.println("Counter: " + counter); System.out.println("threadLocalCounter: " + threadLocalCounter.get()); } } public class TestThread { public static void main(String args[]) { RunnableDemo commonInstance = new RunnableDemo(); Thread t1 = new Thread(commonInstance); Thread t2 = new Thread(commonInstance); Thread t3 = new Thread(commonInstance); Thread t4 = new Thread(commonInstance); t1.start(); t2.start(); t3.start(); t4.start(); // wait for threads to end try { t1.join(); t2.join(); t3.join(); t4.join(); } catch (Exception e) { System.out.println("Interrupted"); } } } 这将产生以下结果。 输出 Counter: 1 threadLocalCounter: 0 Counter: 2 threadLocalCounter: 0 Counter: 3 threadLocalCounter: 0 Counter: 4 threadLocalCounter: 0 您可以看到每个线程都增加了计数器的值,但threadLocalCounter对于每个线程都保持为0。 Java并发性死锁 Java并发ThreadLocalRandom类