当前位置 : 主页 > 编程语言 > c++ >

ThreadLocal的理解

来源:互联网 收集:自由互联 发布时间:2021-07-03
ThreadLocal和线程同步都是为了解决多线程中,相同类型变量的访问冲突问题 ThreadLocal为每一个线程提供了一个独立的变量副本,从而解决了多个线程对变量的访问冲突。ThreadLocal提供了
ThreadLocal和线程同步都是为了解决多线程中,相同类型变量的访问冲突问题
ThreadLocal为每一个线程提供了一个独立的变量副本,从而解决了多个线程对变量的访问冲突。
ThreadLocal提供了get方法,获取与当前线程绑定的变量副本。
同时我们可以通过set方法来把某个资源设定为当前线程的变量副本。
我们可以显式调用romove方法,删除当前线程的变量副本,即使我们不调用,在线程结束之后,也会被自动回收。
intialValue返回当前线程局部变量的初始值

package com.test;  
  
public class TestNum {  
    // ①通过匿名内部类覆盖ThreadLocal的initialValue()方法,指定初始值  
    private static ThreadLocal
 
   seqNum = new ThreadLocal
  
   () { public Integer initialValue() { return 0; } }; // ②获取下一个序列值 public int getNextNum() { seqNum.set(seqNum.get() + 1); return seqNum.get(); } public static void main(String[] args) { TestNum sn = new TestNum(); // ③ 3个线程共享sn,各自产生序列号 TestClient t1 = new TestClient(sn); TestClient t2 = new TestClient(sn); TestClient t3 = new TestClient(sn); t1.start(); t2.start(); t3.start(); } private static class TestClient extends Thread { private TestNum sn; public TestClient(TestNum sn) { this.sn = sn; } public void run() { for (int i = 0; i < 3; i++) { // ④每个线程打出3个序列值 System.out.println("thread[" + Thread.currentThread().getName() + "] --> sn[" + sn.getNextNum() + "]"); } } } }
  
 
网友评论