博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ThreadLocal
阅读量:4106 次
发布时间:2019-05-25

本文共 1781 字,大约阅读时间需要 5 分钟。

https://www.cnblogs.com/dolphin0520/p/3920407.html

public class UnsafeTask implements Runnable {	private Date startDate;	@Override	public void run() {		startDate = new Date();		System.out.printf("Starting Thread: %s : %s\n", Thread.currentThread().getId(), startDate);		try {			TimeUnit.SECONDS.sleep((int) Math.rint(Math.random() * 10));		} catch (InterruptedException e) {			e.printStackTrace();		}		System.out.printf("Thread Finished: %s : %s\n", Thread.currentThread().getId(), startDate);	}}

第一种,同一个Runnable对象时

public class Core {	public static void main(String[] args) {		UnsafeTask task=new UnsafeTask(); 		 for (int i=0; i<10; i++){//		UnsafeTask task=new UnsafeTask();		Thread thread=new Thread(task);		thread.start();		try { TimeUnit.SECONDS.sleep(2);		} catch (InterruptedException e) {		e.printStackTrace();		}		}	}}

你会发现Thread Finished:的时间是相同的。

public static void main(String[] args) {//		UnsafeTask task=new UnsafeTask(); 		 for (int i=0; i<10; i++){		UnsafeTask task=new UnsafeTask();		Thread thread=new Thread(task);		thread.start();		try { TimeUnit.SECONDS.sleep(2);		} catch (InterruptedException e) {		e.printStackTrace();		}		}	}
此种情况每次都是新创建的Runnable对象,不存在上面的问题。

使用Threadlocal的方式

public class UnsafeTask implements Runnable {	// private Date startDate;	private static ThreadLocal
startDate = new ThreadLocal
() { protected Date initialValue() { return new Date(); } }; @Override public void run() { System.out.printf("Starting Thread: %s : %s\n", Thread.currentThread().getId(), startDate.get()); try { TimeUnit.SECONDS.sleep((int) Math.rint(Math.random() * 10)); } catch (InterruptedException e) { e.printStackTrace(); } System.out.printf("Thread Finished: %s : %s\n", Thread.currentThread().getId(), startDate.get()); }}

1

你可能感兴趣的文章
《融入动画技术的交互应用》主题博文推荐
查看>>
链睿和家乐福合作推出下一代零售业隐私保护技术
查看>>
Unifrax宣布新建SiFAB™生产线
查看>>
艾默生纪念谷轮™在空调和制冷领域的百年创新成就
查看>>
NEXO代币持有者获得20,428,359.89美元股息
查看>>
Piper Sandler为EverArc收购Perimeter Solutions提供咨询服务
查看>>
RMRK筹集600万美元,用于在Polkadot上建立先进的NFT系统标准
查看>>
JavaSE_day12 集合
查看>>
JavaSE_day14 集合中的Map集合_键值映射关系
查看>>
Day_15JavaSE 异常
查看>>
异常 Java学习Day_15
查看>>
JavaSE_day_03 方法
查看>>
day-03JavaSE_循环
查看>>
Mysql初始化的命令
查看>>
day_21_0817_Mysql
查看>>
day-22 mysql_SQL 结构化查询语言
查看>>
MySQL关键字的些许问题
查看>>
浅谈HTML
查看>>
css基础
查看>>
HTML&CSS进阶
查看>>