您的位置:首页 > 编程语言 > Java开发

java线程之InheritableThreadLocal

2014-02-11 21:38 351 查看
ThreadLocal和InheritableThreadLocal区别,可以用代码测试一下:

package com.lang;

import junit.framework.TestCase;

import static java.lang.System.out;

public class TestInheritableThreadLocal extends TestCase {

public void testThreadLocal() {
final ThreadLocal<String> local = new ThreadLocal<String>();
work(local);
}

public void testInheritableThreadLocal() {
final ThreadLocal<String> local = new InheritableThreadLocal<String>();
work(local);
}

private void work(final ThreadLocal<String> local) {
local.set("a");
out.println(Thread.currentThread() + "," + local.get());
Thread t = new Thread(new Runnable() {

@Override
public void run() {
out.println(Thread.currentThread() + "," + local.get());
local.set("b");
out.println(Thread.currentThread() + "," + local.get());
}
});

t.start();
try {
t.join();
} catch (InterruptedException e) {
e.printStackTrace();
}

out.println(Thread.currentThread() + "," + local.get());
}
}


运行testThreadLocal,输出:

Thread[main,5,main],a
Thread[Thread-0,5,main],null
Thread[Thread-0,5,main],b
Thread[main,5,main],a


运行testInheritableThreadLocal,输出:

Thread[main,5,main],a
Thread[Thread-0,5,main],a
Thread[Thread-0,5,main],b
Thread[main,5,main],a


比较后,看到ThreadLocal里的值,子线程里不能获得;InheritableThreadLocal里的值,子线程可以获得。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: