我们说,没有共享,就没有并发问题。所以避免共享也是避免并发问题的方式。java提供了ThreadLocal类。
ThreadLocal用于保存某个线程共享变量:对于同一个static ThreadLocal,不同线程只能从中get,set,remove自己的变量,而不会影响其他线程的变量。
private Integer val=0;
@Test
public void test1() throws InterruptedException {
//共享变量,互相影响
Thread t1=new Thread(()->{
for(Integer i=0;i<10;i++){
val++;
log.info(val.toString());
}
});
Thread t2=new Thread(()->{
for(Integer i=0;i<10;i++){
val++;
log.info(val.toString());
}
});
t1.start();
t2.start();
t1.join();
t2.join();
}
private ThreadLocal<Integer> value=ThreadLocal.withInitial(()->{
return 0;
});
@Test
public void test() throws InterruptedException {
//threadlocal 互不影响
Thread t1=new Thread(()->{
for(Integer i=0;i<10;i++){
value.set(value.get()+1);
log.info(value.get().toString());
}
});
Thread t2=new Thread(()->{
for(Integer i=0;i<10;i++){
value.set(value.get()+1);
log.info(value.get().toString());
}
});
t1.start();
t2.start();
t1.join();
t2.join();
}