前几天几个高手的提示,脑洞打开,才发现,原来Runnable的变量是共享的!另感谢提 醒,把错误的语法改了 class A { int a; A(int x){a=x;} public void show(){System.out.println(a);} } ...main(... A a=new A(3); A b=new A(4); a.show(); b.show(); } 这个显示3, 4 但是 class A implements Runnable{ int a; A(int x){a=x;} public void run(){ .. wait for one second; System.out.println(a); } } .. main(.. A a=new A(3); A b=new A(4); Thread t1=new Thread(a); Thread t2=new Thread(b)' t1.start();t2.start(); } 这个显示两个3 所以才有ThreadLocal的介入。不过,ThreadLocal由于是static变量实现Field的能力 ,可以在类外被呼叫的函数里直接调用从而取得Thread构造或者开始的时候设置的参数 。可以在不修改程序总体设计的前提下把参数直接取得。当然,把参数一层层传入也是 可以的。
s*i
3 楼
你是不是在标题加上“安全到家享受美食”之类,跟food搭上线,嗬嗬
p*o
4 楼
还是先去看java concurrency in practice吧
【在 b***i 的大作中提到】 : 前几天几个高手的提示,脑洞打开,才发现,原来Runnable的变量是共享的!另感谢提 : 醒,把错误的语法改了 : class A { : int a; : A(int x){a=x;} : public void show(){System.out.println(a);} : } : ...main(... : A a=new A(3); : A b=new A(4);