ThreadLocal的作用
发布日期:2021-09-16 12:20:03
浏览次数:6
分类:技术文章
本文共 2538 字,大约阅读时间需要 8 分钟。
例子一:
public class Test6 extends Thread{public static void main(String[] args) { new Test6().start(); new Test6().start();}public void run(){ test();}static ThreadLocallocal=new ThreadLocal ();//ThreadLocal是用资源空间换取时间的做法//ThreadLocal底层代码使用一个静态的内部类ThreadLocalMap存储副本变量,好让另一个线程使用static int num;public void test(){ while(true){ try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+"::"+local.get()+"::"+num++); if(local.get()==null){ local.set(0); }else{ int temp=local.get(); local.set(++temp); } }}}/* 输出结果如下: Thread-0::null::0 Thread-1::null::1 Thread-0::0::2 Thread-1::0::3 Thread-0::1::4 Thread-1::1::5 Thread-0::2::6 Thread-1::2::7 Thread-0::3::8 Thread-1::3::9*/
例子二:
public class Test8 {static Mapmap=new HashMap ();//static int data;public static void main(String[] args) { for(int i=0;i<2;i++){ new Thread(){ public void run(){ int num=new Random().nextInt(); System.out.println("has put : "+num);// data=num; map.put(Thread.currentThread(), num); new A().getData(); new B().getData(); } }.start(); }}static class A{ public void getData(){ System.out.println(Thread.currentThread().getName()+": A data:"+/*data*/map.get(Thread.currentThread())); }}static class B{ public void getData(){ System.out.println(Thread.currentThread().getName()+": B data:"+/*data*/map.get(Thread.currentThread())); }}}
例子三:
public class Test9 {public static void main(String[] args) { for(int i=0;i<2;i++){ new Thread(new Runnable(){ public void run(){ int num=new Random().nextInt(); MyThreadScopeData ins=MyThreadScopeData.getThreadInstance(); System.out.println(Thread.currentThread().getName()+":num:"+num); ins.setData(num); ins.setName("name:"+num); ins.getData(); ins.getName(); } }).start(); }}}class MyThreadScopeData{ private static ThreadLocallocal=new ThreadLocal (); private MyThreadScopeData(){}//单例模式 public static MyThreadScopeData getThreadInstance(){ MyThreadScopeData mythread=local.get(); if(mythread==null){ local.set(new MyThreadScopeData()); } return local.get(); } private String name; private Integer data; public void getName() { System.out.println(Thread.currentThread().getName()+":"+name); } public void setName(String name) { this.name = name; } public void getData() { System.out.println(Thread.currentThread().getName()+":"+data); } public void setData(Integer data) { this.data = data; }}
转载地址:https://blog.csdn.net/wxwzy738/article/details/7484909 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2024年04月09日 23时18分11秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Windows10下的powershell美化教程
2019-04-30
利用ffmpeg合并音频和视频
2019-04-30
刷好老毛子系统进不了老毛子系统后台的解决办法
2019-04-30
Parallels Desktop 16 不能联网的解决办法
2019-04-30
SLAM中TUM数据集更改图片名字
2019-04-30
手把手教你--jquery chosen插件的使用和API(html下拉框美化)
2019-04-30
手把手教你--JAVA微信支付(H5支付)
2019-04-30
solr修改schema文件(solr修改配置文件)
2019-04-30
Bootstrap datetimepicker日期时间插件使用方法(日期时间选择器)
2019-04-30
字体图标库(Font Awesome)的使用--绝佳的图标字体库和CSS框架
2019-04-30
select下拉框分组展示插件的使用--(select-mania插件的使用)
2019-04-30
Java 8新特性之--lambda表达式的使用和应用
2019-04-30
Java Lambda表达式的应用--Stream API操作集合框架
2019-04-30
省市区三级联动插件Distpicker--前端实现地区三级联动
2019-04-30
solr的使用详解
2019-04-30
Myslq连接(JDBC)url属性的参数的设置
2019-04-30
关于Java继承,重载及运行的顺序的总结
2019-04-30