Java 多线程学习笔记(十) InheritableThreadLocal的使用

废话少说,上代码

package extthread;

import tools.Tools;

public class ThreadA extends Thread {

	@Override
	public void run() {
		try {
			for (int i = 0; i < 10; i++) {
				System.out.println("在ThreadA线程中取值=" + Tools.tl.get());
				Thread.sleep(100);
			}
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

package ext;

import java.util.Date;

public class InheritableThreadLocalExt extends InheritableThreadLocal {
	@Override
	protected Object initialValue() {
		return new Date().getTime();
	}
}
package test;

import tools.Tools;
import extthread.ThreadA;

public class Run {

	public static void main(String[] args) {
		try {
			for (int i = 0; i < 10; i++) {
				System.out.println("       在Main线程中取值=" + Tools.tl.get());
				Thread.sleep(100);
			}
			Thread.sleep(5000);
			ThreadA a = new ThreadA();
			a.start();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

}

package tools;

import ext.InheritableThreadLocalExt;

public class Tools {
	public static InheritableThreadLocalExt tl = new InheritableThreadLocalExt();
}


子线程可以从父线程中去值。值继承也可以在修改。见如下代码

package ext;

import java.util.Date;

public class InheritableThreadLocalExt extends InheritableThreadLocal {
	@Override
	protected Object initialValue() {
		return new Date().getTime();
	}

	@Override
	protected Object childValue(Object parentValue) {
		return parentValue + " 我在子线程加的~!";
	}
}


运行结果:

       在Main线程中取值=1467603826045
       在Main线程中取值=1467603826045
       在Main线程中取值=1467603826045
       在Main线程中取值=1467603826045
       在Main线程中取值=1467603826045
       在Main线程中取值=1467603826045
       在Main线程中取值=1467603826045
       在Main线程中取值=1467603826045
       在Main线程中取值=1467603826045
       在Main线程中取值=1467603826045
在ThreadA线程中取值=1467603826045 我在子线程加的~!
在ThreadA线程中取值=1467603826045 我在子线程加的~!
在ThreadA线程中取值=1467603826045 我在子线程加的~!
在ThreadA线程中取值=1467603826045 我在子线程加的~!
在ThreadA线程中取值=1467603826045 我在子线程加的~!
在ThreadA线程中取值=1467603826045 我在子线程加的~!
在ThreadA线程中取值=1467603826045 我在子线程加的~!
在ThreadA线程中取值=1467603826045 我在子线程加的~!
在ThreadA线程中取值=1467603826045 我在子线程加的~!
在ThreadA线程中取值=1467603826045 我在子线程加的~!



猜你喜欢

转载自blog.csdn.net/u014756827/article/details/51819791