ThreadLocal
可以在在线程内实现一个局部变量,可以在线程的任何地方来访问,能够减少参数的传递
InheritableThreadLocal
可以在子线程和父线程之间共享实例,也同样是为了减少参数的传递
可以在在线程内实现一个局部变量,可以在线程的任何地方来访问,能够减少参数的传递
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());
}
}
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());
}
}
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());
}
}