マルチスレッドThreadLocal Runnable Threadの深層体験



public class ThreadUtil {

  public static void main(String[] args) throws InterruptedException {
   
        PrimeRun p = new PrimeRun();
    	System.out.println(" :");
    	for(int i=0;i<10;i++){
    		new Thread(p).start();
    	}
    	Thread.sleep(1000);
    	System.out.println(" :");
    	System.out.println(p.getParam()+">>>>>>"+p.getT().get()); 
   }
}

public class PrimeRun implements Runnable {
    
	private static int param=0;
	
	private static ThreadLocal t=new ThreadLocal();

	static{
		t.set(0);
	}
	
	public void run() {
		t.set(param++);
		System.out.println(param+">>"+t.get());
    }
	public static int getParam() {
		return param;
	}
	public static void setParam(int param) {
		PrimeRun.param = param;
	}
	public static ThreadLocal getT() {
		return t;
	}
	public static void setT(ThreadLocal t) {
		PrimeRun.t = t;
	}
}

実行結果:
マルチスレッドの変数:
1>>0
2>>1
3>>2
5>>4
5>>3
7>>5
8>>7
9>>8
7>>6
10>>9
現在のスレッドの変数:
10>>>>>>0
説明:
1.ThreadLocal変数は、各スレッドにおいて互いに独立している.すなわち、動作は単に
ThreadLocal変数のコピー自体は変更されていません.
2.Runnable,Threadはマルチスレッドを実現する一つの方法であり、非ThreadLocal変数は各スレッドで共有されている.すなわち、動作は
変数自体.