ThreadLocal和InheritableThreadLocal的使用

ThreadLocal
可以在在线程内实现一个局部变量,可以在线程的任何地方来访问,能够减少参数的传递
package  jp.co.realseed;
public   class  ThreadLocalTest  {
    
private static ThreadLocal tl_1 = new ThreadLocal(){
        
//返回本线程的名字,变量1
        protected Object initialValue() {
            
return  "Thread name 1 : "+Thread.currentThread().getName();
        }

    }
;
    
private static ThreadLocal tl_2 = new ThreadLocal(){
        
//返回本线程的名字,变量2
        protected Object initialValue() {
            
return  "Thread name 2 : "+Thread.currentThread().getName();
        }

    }
;
    
public static void main(String[] args) {
        
for (int i = 0; i < 10; i++{
            
new Thread(new Runnable(){
                
public void run() {
                    
new ThreadLocalTest().prt();
                }

            }
).start();
        }

    }

    
//打印本线程的名字
    public void prt(){
        System.out.println(tl_1.get());
        System.out.println(tl_2.get());
    }

}


InheritableThreadLocal
可以在子线程和父线程之间共享实例,也同样是为了减少参数的传递
package  jp.co.realseed;
public   class  InheritableThreadLocalTest  {
    
private static InheritableThreadLocal ITL = new InheritableThreadLocal(){
        
protected Object initialValue() {
            
return new StringBuffer("hello");
        }

    }
;
    
public static void main(String[] args) {
        System.out.println(Thread.currentThread().getName()
+" : "+ITL.get());
        
new Thread(new Runnable(){
            
public void run() {
                System.out.println(Thread.currentThread().getName()
+" : "+ITL.get());
                
new Thread(new Runnable(){
                    
public void run() {
                        System.out.println(Thread.currentThread().getName()
+" : "+ITL.get());
                        ((StringBuffer)ITL.get()).append(
", wqf");
                        System.out.println(Thread.currentThread().getName()
+" : "+ITL.get());
                    }

                }
).start();
                
try {
                    Thread.sleep(
1000);
                }
 catch (InterruptedException ex) {
                    ex.printStackTrace();
                }

                System.out.println(Thread.currentThread().getName()
+" : "+ITL.get());
            }
}
).start();
        
try {
            Thread.sleep(
1000);
        }
 catch (InterruptedException ex) {
            ex.printStackTrace();
        }

        System.out.println(Thread.currentThread().getName()
+" : "+ITL.get());
    }


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值