ThreadLocalはスレッドの安全を保証する
7787 ワード
一、概念synchronizedなどのロック方式とは異なり、ThreadLocalではロックは全く提供されません.空間で時間を変える手段を使用して、スレッドの安全を保証するために、各スレッドに変数のコピーを提供します. 性能的には、ThreadLocalは絶対的な優位性を持たず、コンカレントがあまり高くない場合には、ロックをかける性能がより良いが、ロックとは全く関係のないスレッドセキュリティソリューションとして、高コンカレント量や競争が激しいシーンでは、ThreadLocalを使用することでロック競争をある程度減らすことができる.
public class ConnThreadLocal {
public static ThreadLocal<String> th = new ThreadLocal<String>();
public void setTh(String value){
th.set(value);
}
public void getTh(){
System.out.println(Thread.currentThread().getName() + ":" + this.th.get());
}
public static void main(String[] args) throws InterruptedException {
final ConnThreadLocal ct = new ConnThreadLocal();
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
ct.setTh(" ");
ct.getTh();
}
}, "t1");
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(1000);
ct.setTh(" ");
ct.getTh();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}, "t2");
t1.start();
t2.start();
}
}