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

📄 threadlocaltest.java

📁 kaffe Java 解释器语言,源码,Java的子集系统,开放源代码
💻 JAVA
字号:
public class ThreadLocalTest {  private static final Object ioLock = new Object();	  private static ThreadLocal tl = new ThreadLocal() {    protected Object initialValue() {      return " TL initial";    }  };  private static InheritableThreadLocal itl = new InheritableThreadLocal() {    protected Object initialValue() {      return "ITL initial";    }    protected Object childValue(Object pval) {      return (String) pval + " inherited from " + Thread.currentThread().getName();    }  };  private static class TestThread extends Thread {    private boolean spawn;    public TestThread(boolean spawn, String name) {      super(name);      this.spawn = spawn;      //System.out.println("\tThread " + getName() + " created");    }    public void run() {      for (int k = 0; k < 4; k++) {	synchronized (ioLock) {	  System.out.println(getName()+ " I" +k+ "\t TL: "	    + ThreadLocalTest.tl.get());	  System.out.println(getName()+ " I" +k+ "\tITL: "	    + ThreadLocalTest.itl.get());	}	if (spawn && (k & 1) == 1) {	  TestThread t1 = new TestThread(false, getName() + "x");	  t1.start();	  TestThread t2 = new TestThread(false, getName() + "y");	  t2.start();	  	  try	  {	    t1.join();	    t2.join();	  }	  catch (InterruptedException ie)	  {	    System.err.println("INTERRUPTED, try again.");	  }	}	tl.set(tl.get() + " changed by " + getName() + " at k == " + k);	itl.set(((k & 1) == 0) ? null : ("set by " + getName() + " at k == " + k));      }    }  }  public static void main(String[] args) {    Thread t1, t2;    t1 = new TestThread(true, "x");    t2 = new TestThread(true, "y");    t1.start();    t2.start();    // XXX janosvm hack    int tries = 0;    while (tries < 10)    {      try      {	tries++;	t1.join();	t2.join();	tries = 20;      }      catch (InterruptedException ie)      {      }    }  }}// Sort output/* Expected Output:x I0	 TL:  TL initialx I0	ITL: ITL initialx I1	 TL:  TL initial changed by x at k == 0x I1	ITL: nullx I2	 TL:  TL initial changed by x at k == 0 changed by x at k == 1x I2	ITL: set by x at k == 1x I3	 TL:  TL initial changed by x at k == 0 changed by x at k == 1 changed by x at k == 2x I3	ITL: nullxx I0	 TL:  TL initialxx I0	 TL:  TL initialxx I0	ITL: null inherited from xxx I0	ITL: null inherited from xxx I1	 TL:  TL initial changed by xx at k == 0xx I1	 TL:  TL initial changed by xx at k == 0xx I1	ITL: nullxx I1	ITL: nullxx I2	 TL:  TL initial changed by xx at k == 0 changed by xx at k == 1xx I2	 TL:  TL initial changed by xx at k == 0 changed by xx at k == 1xx I2	ITL: set by xx at k == 1xx I2	ITL: set by xx at k == 1xx I3	 TL:  TL initial changed by xx at k == 0 changed by xx at k == 1 changed by xx at k == 2xx I3	 TL:  TL initial changed by xx at k == 0 changed by xx at k == 1 changed by xx at k == 2xx I3	ITL: nullxx I3	ITL: nullxy I0	 TL:  TL initialxy I0	 TL:  TL initialxy I0	ITL: null inherited from xxy I0	ITL: null inherited from xxy I1	 TL:  TL initial changed by xy at k == 0xy I1	 TL:  TL initial changed by xy at k == 0xy I1	ITL: nullxy I1	ITL: nullxy I2	 TL:  TL initial changed by xy at k == 0 changed by xy at k == 1xy I2	 TL:  TL initial changed by xy at k == 0 changed by xy at k == 1xy I2	ITL: set by xy at k == 1xy I2	ITL: set by xy at k == 1xy I3	 TL:  TL initial changed by xy at k == 0 changed by xy at k == 1 changed by xy at k == 2xy I3	 TL:  TL initial changed by xy at k == 0 changed by xy at k == 1 changed by xy at k == 2xy I3	ITL: nullxy I3	ITL: nully I0	 TL:  TL initialy I0	ITL: ITL initialy I1	 TL:  TL initial changed by y at k == 0y I1	ITL: nully I2	 TL:  TL initial changed by y at k == 0 changed by y at k == 1y I2	ITL: set by y at k == 1y I3	 TL:  TL initial changed by y at k == 0 changed by y at k == 1 changed by y at k == 2y I3	ITL: nullyx I0	 TL:  TL initialyx I0	 TL:  TL initialyx I0	ITL: null inherited from yyx I0	ITL: null inherited from yyx I1	 TL:  TL initial changed by yx at k == 0yx I1	 TL:  TL initial changed by yx at k == 0yx I1	ITL: nullyx I1	ITL: nullyx I2	 TL:  TL initial changed by yx at k == 0 changed by yx at k == 1yx I2	 TL:  TL initial changed by yx at k == 0 changed by yx at k == 1yx I2	ITL: set by yx at k == 1yx I2	ITL: set by yx at k == 1yx I3	 TL:  TL initial changed by yx at k == 0 changed by yx at k == 1 changed by yx at k == 2yx I3	 TL:  TL initial changed by yx at k == 0 changed by yx at k == 1 changed by yx at k == 2yx I3	ITL: nullyx I3	ITL: nullyy I0	 TL:  TL initialyy I0	 TL:  TL initialyy I0	ITL: null inherited from yyy I0	ITL: null inherited from yyy I1	 TL:  TL initial changed by yy at k == 0yy I1	 TL:  TL initial changed by yy at k == 0yy I1	ITL: nullyy I1	ITL: nullyy I2	 TL:  TL initial changed by yy at k == 0 changed by yy at k == 1yy I2	 TL:  TL initial changed by yy at k == 0 changed by yy at k == 1yy I2	ITL: set by yy at k == 1yy I2	ITL: set by yy at k == 1yy I3	 TL:  TL initial changed by yy at k == 0 changed by yy at k == 1 changed by yy at k == 2yy I3	 TL:  TL initial changed by yy at k == 0 changed by yy at k == 1 changed by yy at k == 2yy I3	ITL: nullyy I3	ITL: null*/

⌨️ 快捷键说明

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