前面我们学习了同步控制线程安全,同步的实现有本地锁Synchronized关键字以及重入锁ReentrantLock。同步就是控制访问资源的角度实现线程安全,但是实现线程安全,不一定非得同步,也可以从增加共享资源的角度出发。
人手一支笔(ThreadLocal)
如果一个变量要被线程独享,可以通过java.lang.ThreadLocal类实现线程本地存储的功能。既然是本地存储的,那么就只有当前线程可以访问,自然是线程安全的。
package xidian.lili.ThreadLocal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadLockDemo {
private static ThreadLocal<SimpleDateFormat> t1=new ThreadLocal<SimpleDateFormat>();
public static class ParseDate implements Runnable
{
int i=0;
public ParseDate(int i) {
this.i = i;
}
@Override
public void run() {
if(t1.get()==null){
t1.set(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
}
try {
Date t=t1.get().parse("2018-07-29 19:29:" + i%60);
System.out.println(Thread.currentThread().getId()+":"+t);
} catch (Pa