使用ThreadLocal为不同的线程关联不同的id

 package test;
/**
 * java.lang.ThreadLocal创建线程局部变量
 * 每一条线程在同一个变量中存储不同的值,每条线程只能看到自己的值
 * @author xxzx
 *
 */
public class ThreadLocalDemo {
//创建一个局部变量
private static volatile ThreadLocal<String> userID=new ThreadLocal<String>(); public static void main(String []args) { Runnable r=new Runnable() { @Override public void run() { // TODO Auto-generated method stub String name =Thread.currentThread().getName(); if(name.equals("A")) { userID.set("FOXTROT"); } else userID.set("charlie"); //userID.remove(); System.err.println(name+""+userID.get()); } }; Thread A=new Thread(r); A.setName("A"); Thread B=new Thread(r); B.setName("B"); System.out.println("线程开始执行...."); A.start(); B.start(); } }

 代  码  说  明:每个ThreadLocal 代表一个局部变量,它为每一个访问它的线程提供了单独的存储槽,每个线程可以在同一个变量中存储不同的值,可直接通过get()方法获取

其他方法说明:initialValue()       创建调用线程存储槽并存入一个初始值为null,如果要改写默认值,需要继承ThreadLocal类并重写其protected方法

                         remove()         清空调用线程的存储槽,清空之后获取的值为initialValue ,null

                         set()           设置存储槽中的值

posted @ 2019-08-22 19:43  pamne  阅读(623)  评论(0编辑  收藏  举报