JavaEE进阶(7) ThreadLocal解决多线程程序的并发问题

ThreadLocal对象.set(T value):给线程的局部变量设置值
ThreadLocal对象.get():获取线程局部变量中的值

ex:

/**
 * ThreadLocal:解决多线程程序的并发问题
 * ThreadLocal对象.set(T value):给线程的局部变量设置值
 * ThreadLocal对象.get():获取线程局部变量中的值
 * @author 郑清
 */
public class _08TestThreadLocal {
	//用两个线程,分配给静态字段赋值,各自线程取各自的值
	//存在问题:线程安全,静态字段是被共享的
	//线程1 ==》num = 10 ;  使用  共享num
	//线程2 ==》num = 20 ;  使用  共享num
	public static void main(String[] args) {
		new Thread(new Runnable() {//线程1
			@Override
			public void run() {
				while(true){
					//A.num = 10;
					A.lc.set(10);
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					System.out.println("线程1-->"+A.getNum());//A.getNum() ==>即lc.get();  10
				}
			}
		}).start();
		while(true){//2  main方法也是一个线程
			A.num = 20;
			A.lc.set(A.num);//main线程 key,value 值 存入
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			System.out.println("线程2main-->"+A.getNum());//20
		}
	}
}
class A{
	public static int num;
	static ThreadLocal lc = new ThreadLocal();
	public static Object getNum(){
		return lc.get();
	}
}

运行结果图:

JavaEE进阶(7) ThreadLocal解决多线程程序的并发问题_第1张图片

 

你可能感兴趣的:(-----❷,JavaEE进阶)