ThreadLocal的练习代码


 

场景:

有三个小孩儿,买了一个变形金刚玩具(Transformer)....

三个小孩都争着玩这个玩具....没有一个人可以玩...

第一种方式:每个人各玩一会....

第二种方式:再买两个玩具,一个人玩一个.

每个小孩都当成一个线程.三个小孩就有三个线程.

 

Child.java

 2 
 3 import java.util.Random;
 4 import java.util.concurrent.TimeUnit;
 5 
 6 public class Child implements Runnable{
 7     private Transformer2 transformer;
 8     
 9     private String name ;
10 
11     
12     public Child(Transformer2 transformer) {
13         this.transformer = transformer;
14     }
15 
16     public Child() {
17     }
18 
19     public Transformer2 getTransformer() {
20         return transformer;
21     }
22 
23     public void setTransformer(Transformer2 transformer) {
24         this.transformer = transformer;
25     }
26 
27     public String getName() {
28         return name;
29     }
30 
31     public void setName(String name) {
32         this.name = name;
33     }
34     
35     
36     public void play(){
37         
38         
39         while (true) {
40             try {
41                 //transformer = new Transformer();//每次调用该方法,该对象都是新的。
42                 
43                 //想要的效果是每个小孩儿都有一个玩具,但是不管他玩多少次,这个玩具永远都是唯一的.
44                 transformer = Transformer2.getInstance();
45                 System.out.println(Thread.currentThread().getName() +" :"+transformer );
46                 String str = "擎天柱" + new Random().nextInt(10);
47                 System.out.println(Thread.currentThread().getName()
48                         + ": 将变形金刚设置成 :" + str);
49                 transformer.setType(str);
50                 TimeUnit.SECONDS.sleep(2);
51 
52                 String type = transformer.getType();
53 
54                 System.out.println(Thread.currentThread().getName()
55                         + ": 获取到的变形金刚是:" + type);
56 
57             } catch (InterruptedException e) {
58                 e.printStackTrace();
59             }
60         }
61         
62     }
63 
64     @Override
65     public void run() {
66         play();
67     }
68     
69 }

 

 

 Transformer.java

 2 
 3 import java.util.HashMap;
 4 import java.util.Map;
 5 
 6 
 7 /*
 8  * 每个线程都有且仅有一个 该类对象的引用。
 9  * 不应该在外部类中随便的去new 所以构造方法私有
10  * 
11  */
12 public class Transformer {
13 
14     private static Map<Thread, Transformer> maps = new HashMap<Thread, Transformer>();
15     
16     private String type;
17     
18     private Transformer(){}
19     
20     public static Transformer getInstance() {
21         Transformer instance = maps.get(Thread.currentThread());
22         if(instance == null) {
23             instance = new Transformer();
24             maps.put(Thread.currentThread(),instance);
25         }
26         return instance;
27     }
28     public String getType() {
29         return type;
30     }
31 
32     public void setType(String type) {
33         this.type = type;
34     }
35     
36     
37 }

 

 

Transformer2.java(使用ThreadLocal类)

 2 
 3 import java.util.HashMap;
 4 import java.util.Map;
 5 
 6 
 7 /*
 8  * 每个线程都有且仅有一个 该类对象的引用。
 9  * 
10  */
11 public class Transformer2 {
12 
13     //private static Map<Thread, Transformer2> maps = new HashMap<Thread, Transformer2>();
14     private static ThreadLocal<Transformer2> maps = new ThreadLocal<Transformer2>();
15     
16     private String type;
17 
18     
19     private Transformer2(){}
20     
21     public static Transformer2 getInstance() {
22         Transformer2 instance = maps.get();
23         if(instance == null) {
24             instance = new Transformer2();
25             maps.set(instance);
26         }
27         return instance;
28     }
29     public String getType() {
30         return type;
31     }
32 
33     public void setType(String type) {
34         this.type = type;
35     }
36 }

 

 

测试类:

 2 
 3 public class Test {
 4 
 5     public static void main(String[] args) {
 6         
 7         //Transformer transformer = new Transformer();
 8         
 9         for (int i = 0; i < 3; i++) {
10             new Thread(new Child()).start();
11         }
12     }
13 }

 

转载于:https://www.cnblogs.com/DreamDrive/p/6189267.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/456691.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nginx+uwsgi部署Django

本篇文章主要介绍了解决nginxuwsgi部署Django的所有问题(小结)&#xff0c;小编觉得挺不错的&#xff0c;现在分享给大家&#xff0c;也给大家做个参考。一起跟随小编过来看看吧 最近&#xff0c;自己暑假写的小项目也算完毕了&#xff0c;想着投放到自己云服务器上&#xff0…

$(document).scrollTop()与$(window).scrollTop()

$(document).scrollTop() 获取垂直滚动的距离 即当前滚动的地方的窗口顶端到整个页面顶端的距离 要获取顶端 只需要获取到scrollTop()0的时候 就是顶端了 要获取底端 只要获取$(document).scrollTop()>(document).height()−(window).height() 就可以知道已经…

各种机器学习开源项目精选TOP30

8800个机器学习开源项目为你精选TOP30&#xff01; 授权自AI科技大本营&#xff08;ID: rgznai100) 本文共图文结合&#xff0c;建议阅读5分钟。 本文为大家带来了30个广受好评的机器学习开源项目。 最近&#xff0c;Mybridge发布了一篇文章&#xff0c;对比了过去一年中机…

Python中is与==的使用区别详解

>>> a 1000 >>> b 1000 >>> print(id(a),id(b)) 2689566689904 2689566688880 >>> a ,b 1000,1000 >>> print(id(a),id(b)) 2689566689968 2689566689968 一行执行的用一个id地址 分行执行用两个地址

解决:Please specify a different SDK name--PyCharm报错

这个问题出现的原因是因为PyCharm中存在相同名字的虚拟环境变量。 本人的出错原因是&#xff0c;一直使用PyCharm的默认设置来建立工程&#xff0c;所以每个工程都建立了自己独立的虚拟环境。 我个人删除了一些工程后&#xff0c;又建立相同名字的工程。所以才会出现存在相同…

Tomcat控制台输出到文件

为什么80%的码农都做不了架构师&#xff1f;>>> 修改startup.bat call "%EXECUTABLE%" start %CMD_LINE_ARGS% 为 call "%EXECUTABLE%" run %CMD_LINE_ARGS% >> ..\logs\test.log 转载于:https://my.oschina.net/cccyb/blog/886047

常见算法详解(原理及代码实现Python版本)

文章目录前言1、冒泡排序2、选择排序3、插入排序4、希尔排序5、快速排序6、归并排序7、二分法查找总结前言 最近复习了下常见的算法&#xff0c;在这里手动再写一遍&#xff0c;权当加深自己的印象。代码实现用的是python3.6版本。 1、冒泡排序 原理&#xff1a; 冒泡排序&a…

解决:pycharm运行程序时在Python console窗口中运行 һ����ң�������1�����

解决&#xff1a;pycharm运行程序时在Python c 问题&#xff1a; 在pycharm中右键点击run运行程序&#xff0c;发现没有打开run窗口运行&#xff0c;而是在Python console窗口中运行的。 解决方法&#xff1a; 打开菜单栏 run->edit configurations&#xff0c; 把下图中的…

Autowire异常

Autowire异常主要由三个情况发生的 1. 你的ServiceImpl必须以Service或Component注解才行。 2. 自动写入的时候把接口写成实现类了&#xff0c;例如 Autowired private BrandServiceImpl brandServiceImpl; 应该是 Autowired private BrandService brandService; 3. 在Dao 类上…

[转载] 全方位提升网站打开速度:前端、后端、新的技术

原文地址&#xff1a;Building a Shop with Sub-Second Page Loads: Lessons Learned原文作者&#xff1a;Erik Witt译文出自&#xff1a;掘金翻译计划译者&#xff1a;luoyaqifei校对者&#xff1a;Romeo0906&#xff0c;L9m全方位提升网站打开速度&#xff1a;前端、后端、新…

20个顶级大数据软件应用程序

目录1. Domo2. Teradata Database3. Hitachi Vantara4. TIBCO公司的Statistica5. Panoply6. IBM Watson Analytics7. SAS Visual Analytics8. Sisense商业智能软件9. Talend的大数据工作室10. Cloudera11. MongoDB12. Vertica Analytics Platform13. SAP Vora14. Oracle Big Da…

python完成‘21点游戏’

完成‘21点游戏’ 人机对战&#xff1a; 输入玩家姓名&#xff1a;玩家可以多次要牌&#xff0c;其中JQK&#xff0c;大小王是半点&#xff0c;其他是正常点数&#xff0c;玩家每要一次牌就打印下当前点数和系统点数。可以设置系统&#xff1a;只要大于等于21点就不要牌了&am…

materialrefeshlayout下拉刷新,上拉加载更多

1.添加依赖:compile com.cjj.materialrefeshlayout:library:1.3.0 2.布局中添加控件&#xff0c;包裹list控件<com.cjj.MaterialRefreshLayoutxmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto…

MapTask、ReduceTask并行度决定机制

目录前言:1、mapTask并行度的决定机制2、ReduceTask并行度的决定总结&#xff1a; 目录 前言: MapTask的并行度决定map阶段的任务处理并发度&#xff0c;进而影响到整个job的处理速度。那么&#xff0c;MapTask并行实例是否越多越好呢&#xff1f;其并行度又是如何决定呢&am…

python# 完成“剪刀石头布游戏”:

# 完成“剪刀石头布游戏”&#xff1a; # 1. 进入剪刀石头布游戏 # 2. 系统随机出&#xff1a;可以是剪刀&#xff0c;可以是布&#xff0c;也可以是石头&#xff08;可以使用随机数完成1&#xff1a;剪刀&#xff0c;2&#xff1a;布&#xff0c;3&#xff1a;石头&#x…

6大主流开源SQL引擎总结,遥遥领先的是谁?

根据 O’Reilly 2016年数据科学薪资调查显示&#xff0c;SQL 是数据科学领域使用最广泛的语言。大部分项目都需要一些SQL 操作&#xff0c;甚至有一些只需要SQL。本文就带你来了解这些主流的开源SQL引擎&#xff01;背景介绍 本文涵盖了6个开源领导者&#xff1a;Hive、Impala、…

Yarn在MapReduce中的工作机制

目录前言:1、YARN概述2、mapreduce&yarn的工作机制总结&#xff1a; 目录 前言: 在了解Yarn在MR中的作用的时候需要先了解Yarn是什么。 1、YARN概述 Yarn是一个资源调度平台&#xff0c;负责为运算程序提供服务器运算资源&#xff0c;相当于一个分布式的操作系统平台&…

python 掷骰子游戏

掷骰子游戏&#xff1a; 掷骰子游戏 可选择的参加游戏的角色是&#xff1a;1.貂蝉 2.刘备 3.孙悟空 4.诸葛亮 5.曹操 输入参加游戏的角色是: 1 貂蝉进入游戏…… 貂蝉请充值&#xff08;金额必须是100的倍数&#xff09;&#xff1a; ---》注意&#xff1a;充值3次不…

长连接心跳机制理解

近期使用go 开发聊天室&#xff0c;使用到websocket常链接。 if err websocket.JSON.Receive(ws,&reply); err ! nil {log.Println(err)return } 我发现当连接断开的时候会走if里面&#xff0c;输出eof 这样就知道&#xff0c;客户端断开了连接。 但在之前使用workerman …

老男孩36期运维脱产班---- 决心书

我叫林宗超&#xff0c;来自四川&#xff0c;12年前毕业于四川的一所普通高中学校&#xff0c;毕业后再也没有从事过其他的教育培训学习。离开学校后我去过广东&#xff0c;福建&#xff0c;最后因为我家驾校有了点小小的规模&#xff0c;缺人&#xff0c;我回到了成都做了几年…