マルチスレッド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変数は各スレッドで共有されている.すなわち、動作は
変数自体.