⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 inheritablethreadid.java

📁 Java Thread Programming (Source
💻 JAVA
字号:
public class InheritableThreadID extends Object {
	public static final int UNIQUE  = 101;
	public static final int INHERIT = 102;
	public static final int SUFFIX  = 103;

	private ThreadLocal threadLocal;
	private int nextID;

	public InheritableThreadID(int type) {
		nextID = 201;

		switch ( type ) {
			case UNIQUE:
				threadLocal = new ThreadLocal() {
						// override from ThreadLocal
						protected Object initialValue() {
							print("in initialValue()");
							return getNewID();
						}
					};
				break;

			case INHERIT:
				threadLocal = new InheritableThreadLocal() {
						// override from ThreadLocal
						protected Object initialValue() {
							print("in initialValue()");
							return getNewID();
						}
					};
				break;

			case SUFFIX:
				threadLocal = new InheritableThreadLocal() {
						// override from ThreadLocal
						protected Object initialValue() {
							print("in initialValue()");
							return getNewID();
						}

						// override from InheritableThreadLocal
						protected Object childValue(
									Object parentValue
								) {

							print("in childValue() - " +
								"parentValue=" + parentValue);

							return parentValue + "-CH";
						}
					};
				break;
			default:
				break;
		}
	}

	private synchronized String getNewID() {
		String id = "ID" + nextID;
		nextID++;
		return id;
	}

	public String getID() {
		return (String) threadLocal.get();
	}

	public static void print(String msg) {
		String name = Thread.currentThread().getName();
		System.out.println(name + ": " + msg);
	}

	public static Runnable createTarget(InheritableThreadID id) {
		final InheritableThreadID var = id;

		Runnable parentRun = new Runnable() {
			public void run() {
				print("var.getID()=" + var.getID());
				print("var.getID()=" + var.getID());
				print("var.getID()=" + var.getID());

				Runnable childRun = new Runnable() {
						public void run() {
							print("var.getID()=" + var.getID());
							print("var.getID()=" + var.getID());
							print("var.getID()=" + var.getID());
						}
					};

				Thread parentT = Thread.currentThread();
				String parentName = parentT.getName();
				print("creating a child thread of " +
					parentName);

				Thread childT = new Thread(childRun, 
						parentName + "-child");
				childT.start();
			}
		};

		return parentRun;
	}

	public static void main(String[] args) {
		try {
			System.out.println("======= ThreadLocal =======");
			InheritableThreadID varA = 
				new InheritableThreadID(UNIQUE);

			Runnable targetA = createTarget(varA);
			Thread threadA = new Thread(targetA, "threadA");
			threadA.start();

			Thread.sleep(2500);
			System.out.println("\n======= " +
				"InheritableThreadLocal =======");

			InheritableThreadID varB = 
				new InheritableThreadID(INHERIT);

			Runnable targetB = createTarget(varB);
			Thread threadB = new Thread(targetB, "threadB");
			threadB.start();

			Thread.sleep(2500);
			System.out.println("\n======= " +
				"InheritableThreadLocal - custom childValue()" +
				" =======");

			InheritableThreadID varC = 
				new InheritableThreadID(SUFFIX);

			Runnable targetC = createTarget(varC);
			Thread threadC = new Thread(targetC, "threadC");
			threadC.start();
		} catch ( InterruptedException x ) {
			// ignore
		}

	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -