- Java并发是什么?
- Java并发开发环境配置
- Java并发主要操作
- Java并发线程间通信
- Java并发同步
- Java并发死锁
- 实用类实例
- 锁示例
- 原子变量示例
- 执行者示例
- 线程池示例
- 高级示例
- 并发集合
Java并发ThreadLocal类
ThreadLocal
类用于创建只能由同一个线程读取和写入的线程局部变量。 例如,如果两个线程正在访问引用相同threadLocal
变量的代码,那么每个线程都不会看到任何其他线程操作完成的线程变量。
线程方法
以下是ThreadLocal
类中可用的重要方法的列表。
编号 | 方法 | 描述 |
---|---|---|
1 | public T get() |
返回当前线程的线程局部变量的副本中的值。 |
2 | protected T initialValue() |
返回此线程局部变量的当前线程的“初始值”。 |
3 | public void remove() |
删除此线程局部变量的当前线程的值。 |
4 | public void set(T value) |
将当前线程的线程局部变量的副本设置为指定的值。 |
实例
以下TestThread
程序演示了ThreadLocal
类的上面一些方法。 这里我们使用了两个计数器(counter
)变量,一个是常量变量,另一个是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: 4 Counter: 3 threadLocalCounter: 0 threadLocalCounter: 0
您可以看到变量(counter
)的值由每个线程增加,但是ThreadLocalCounter
对于每个线程都保持为0
。
上一篇:Java并发死锁
分类导航
- Java教程
- Vim教程
- Swing教程
- Spring教程
- Spring Web Services教程
- Spring MVC教程
- Spring JDBC教程
- Spring Cloud教程
- Spring Boot教程
- Spring Boot CLI教程
- Spring Batch教程
- Spring AOP教程
- PDFBox教程
- JSP教程
- JSF教程
- JPA教程
- Java面向对象设计
- Java设计模式
- Java虚拟机教程
- Java泛型教程
- Java正则表达式教程
- Java数据类型教程
- Java并发编程教程
- Java密码学教程
- Java多线程教程
- Java国际化(i18n)教程
- JavaFX教程
- Java9教程
关注微信小程序
扫描二维码
程序员编程王