实现两个线程的时间格式化:SimpleDateFormat 加锁
public static void main(String[] args) {
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(10,10,0, TimeUnit.SECONDS,
new LinkedBlockingQueue<>(1000));
for (int i = 1; i < 1001; i++) {
final int FI=i;
threadPoolExecutor.submit(new Runnable() {
@Override
public void run() {
Date date = new Date(1000*FI);
MyFormatTime(date);
}
});
}
}
//加锁之后会排队处理
private static SimpleDateFormat format = new SimpleDateFormat("mm:ss");
private synchronized static void MyFormatTime(Date date){
String result=format.format(date);
System.out.println("线程名:"+ Thread.currentThread().getName()+","+result);
}
实现1000个线程的时间格式化:
//创建并初始化 ThreadLocal
private static ThreadLocal<SimpleDateFormat> threadLocal =
ThreadLocal.withInitial(new Supplier<SimpleDateFormat>() {
@Override
public SimpleDateFormat get() {
System.out.println("执行了初始化方法");
return new SimpleDateFormat("mm:ss");
}
});
public static void main(String[] args) {
//创建线程池
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(10,10,0, TimeUnit.SECONDS,
new LinkedBlockingQueue<>(1000));
for (int i = 1; i < 1001; i++) {
int FI=i;
threadPoolExecutor.submit(new Runnable() {
@Override
public void run() {
Date date = new Date(1000*FI);
MyFormatTime2(date);
}
});
}
}
private static void MyFormatTime2(Date date){
System.out.println("线程名:"+ Thread.currentThread().getName()+","+threadLocal.get().format(date));
}