小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

傳統(tǒng)時(shí)間格式化的線程安全問(wèn)題

 Coder編程 2022-10-22 發(fā)布于北京

一、傳統(tǒng)使用方式存在安全性問(wèn)題

        針對(duì)DateFormat

public static void main(String[] args) throws Exception {
		ExecutorService pool = Executors.newFixedThreadPool(10);
	
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
		
		Callable<Date> task = new Callable<Date>() {

			@Override
			public Date call() throws Exception {
				return df.parse("2021-03-08");
			}
			
		};
		
		List<Future<Date>> list = new ArrayList<>();
		
		for(int i = 0; i < 10; i++) {
			Future<Date> submit = pool.submit(task);
			list.add(submit);
		}
		
		for(Future<Date> future : list) {
			System.out.println(future.get());
		}
		
		pool.shutdown();
}

二、解決方法一

            使用ThreadLocal加鎖

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

/** 
* @ClassName: DateFormatThreadLocal 
* @Description: TODO
* @author Liu 
* @date 2021年3月8日 上午11:36:42 
*/
public class DateFormatThreadLocal {

	public static final ThreadLocal<DateFormat> THREAD_LOCAL = new ThreadLocal<DateFormat>() {
		protected DateFormat initialValue() {
	        return new SimpleDateFormat("yyyy-MM-dd");
	    }
	};
	
	public static Date convert(String str) throws Exception {
		return THREAD_LOCAL.get().parse(str);
	}
}
public static void main(String[] args) throws Exception {
		ExecutorService pool = Executors.newFixedThreadPool(10);
		
		Callable<Date> task = new Callable<Date>() {
			
			@Override
			public Date call() throws Exception {
				return DateFormatThreadLocal.convert("2021-03-08");
			}
			
		};
		
		List<Future<Date>> list = new ArrayList<>();
		
		for(int i = 0; i < 10; i++) {
			Future<Date> submit = pool.submit(task);
			list.add(submit);
		}
		
		for(Future<Date> future : list) {
			System.out.println(future.get());
		}
		
		pool.shutdown();
	}

三、解決方法二

        使用java8新的日期api DateTimeFormatter

public static void main(String[] args) throws Exception {
		ExecutorService pool = Executors.newFixedThreadPool(10);
		
		DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
		
		Callable<LocalDate> task = new Callable<LocalDate>() {
			
			@Override
			public LocalDate call() throws Exception {
				return LocalDate.parse("2021-03-08", dtf);
			}
			
		};
		
		List<Future<LocalDate>> list = new ArrayList<>();
		
		for(int i = 0; i < 10; i++) {
			Future<LocalDate> submit = pool.submit(task);
			list.add(submit);
		}
		
		for(Future<LocalDate> future : list) {
			System.out.println(future.get());
		}
		
		pool.shutdown();
	}

 

showtooltip

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多