当前位置: 首页 > news >正文

医疗网站的建设主要竞争对手制作游戏

医疗网站的建设主要竞争对手,制作游戏,个性化定制平台,游戏代理赚钱模拟ThreadLocal类实现#xff1a;线程范围内的共享变量#xff0c;每个线程只能访问他自己的#xff0c;不能访问别的线程。 package com.ljq.test.thread;import java.util.HashMap; import java.util.Map; import java.util.Random;/*** 线程范围内的共享变量* * 三个模块…模拟ThreadLocal类实现线程范围内的共享变量每个线程只能访问他自己的不能访问别的线程。 package com.ljq.test.thread;import java.util.HashMap; import java.util.Map; import java.util.Random;/*** 线程范围内的共享变量* * 三个模块共享数据主线程模块和AB模块* * author Administrator* */ public class ThreadScopeShareData {// 准备共享的数据private static int data 0;// 存放各个线程对应的数据private static MapThread, Integer threadData new HashMapThread, Integer();public static void main(String[] args) {// 启动两个线程for (int i 0; i 2; i) {new Thread(new Runnable() {Overridepublic void run() {// 现在当前线程中修改一下数据,给出修改信息int data new Random().nextInt();// 将线程信息和对应数据存储起来threadData.put(Thread.currentThread(), data);System.out.println(Thread.currentThread().getName() has put data : data);new A().get();new B().get();}}).start();}}static class A {public void get() {int data threadData.get(Thread.currentThread());System.out.println(A from Thread.currentThread().getName() get data : data);}}static class B {public void get() {int data threadData.get(Thread.currentThread());System.out.println(B from Thread.currentThread().getName() get data : data);}} } 运行结果 ThreadLocal的作用和目的用于实现线程内的数据共享即对于相同的程序代码多个模块在同一个线程中运行时要共享一份数据而在另外线程中运行时又共享另外一份数据。 每个线程调用全局ThreadLocal对象的set方法就相当于往其内部的map中增加一条记录key分别是各自的线程value是各自的set方法传进去的值。在线程结束时可以调用ThreadLocal.clear()方法这样会更快释放内存不调用也可以因为线程结束后也可以自动释放相关的ThreadLocal变量。 ThreadLocal的应用场景订单处理包含一系列操作减少库存量、增加一条流水台账、修改总账这几个操作要在同一个事务中完成通常也即同一个线程中进行处理如果累加公司应收款的操作失败了则应该把前面的操作回滚否则提交所有操作这要求这些操作使用相同的数据库连接对象而这些操作的代码分别位于不同的模块类中。 银行转账包含一系列操作 把转出帐户的余额减少把转入帐户的余额增加这两个操作要在同一个事务中完成它们必须使用相同的数据库连接对象转入和转出操作的代码分别是两个不同的帐户对象的方法。 例如Strut2的ActionContext同一段代码被不同的线程调用运行时该代码操作的数据是每个线程各自的状态和数据对于不同的线程来说getContext方法拿到的对象都不相同对同一个线程来说不管调用getContext方法多少次和在哪个模块中getContext方法拿到的都是同一个。 实验案例定义一个全局共享的ThreadLocal变量然后启动多个线程向该ThreadLocal变量中存储一个随机值接着各个线程调用另外其他多个类的方法这多个类的方法中读取这个ThreadLocal变量的值就可以看到多个类在同一个线程中共享同一份数据。 实现对ThreadLocal变量的封装让外界不要直接操作ThreadLocal变量。对基本类型的数据的封装这种应用相对很少见。对对象类型的数据的封装比较常见即让某个类针对不同线程分别创建一个独立的实例对象。 package com.ljq.test.thread;import java.util.Random;/*** ThreadLocal类及应用技巧* * 将线程范围内共享数据进行封装封装到一个单独的数据类中提供设置获取方法* 将该类单例化提供获取实例对象的方法获取到的实例对象是已经封装好的当前线程范围内的对象*/ public class ThreadLocalTest {private static ThreadLocalInteger x new ThreadLocalInteger();//private static ThreadLocalMyThreadScopeData myThreadScopeData new ThreadLocalMyThreadScopeData();public static void main(String[] args) {for(int i0;i2;i){new Thread(new Runnable(){Overridepublic void run() {int data new Random().nextInt();System.out.println(Thread.currentThread().getName() has put data : data);x.set(data);/* MyThreadScopeData myData new MyThreadScopeData();myData.setName(name data);myData.setAge(data);myThreadScopeData.set(myData);*/MyThreadScopeData.getThreadInstance().setName(name data);MyThreadScopeData.getThreadInstance().setAge(data);new A().get();new B().get();}}).start();}}//使用获取到的线程范围内的对象实例调用相应方法static class A{public void get(){int data x.get();System.out.println(A from Thread.currentThread().getName() get data : data);/* MyThreadScopeData myData myThreadScopeData.get();System.out.println(A from Thread.currentThread().getName() getMyData: myData.getName() , myData.getAge());*/MyThreadScopeData myData MyThreadScopeData.getThreadInstance();System.out.println(A from Thread.currentThread().getName() getMyData: myData.getName() , myData.getAge());}}//使用获取到的线程范围内的对象实例调用相应方法static class B{public void get(){int data x.get(); System.out.println(B from Thread.currentThread().getName() get data : data);MyThreadScopeData myData MyThreadScopeData.getThreadInstance();System.out.println(B from Thread.currentThread().getName() getMyData: myData.getName() , myData.getAge()); } } }class MyThreadScopeData {// 单例private MyThreadScopeData() {}// 提供获取实例方法不加synchronized关键字表示线程各拿各自的数据互不干扰public static/* synchronized */MyThreadScopeData getThreadInstance() {// 从当前线程范围内数据集中获取实例对象MyThreadScopeData instance map.get();if (instance null) {instance new MyThreadScopeData();map.set(instance);}return instance;}// 将实例对象存入当前线程范围内数据集中private static ThreadLocalMyThreadScopeData map new ThreadLocalMyThreadScopeData();private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name name;}public int getAge() {return age;}public void setAge(int age) {this.age age;} } xxxxxxxxxxxxxxxxxxx
http://www.pierceye.com/news/733667/

相关文章:

  • 网站搭建徐州百度网络c2c平台是洗钱吗
  • 二级域名站群微信上浏览自己做的网站吗
  • 十堰微网站建设费用ps做网站尺寸
  • 网站后台制作用的软件电子商务网站推广案例
  • 汽车低价网站建设wordpress怎么搜索中文主题
  • 温江建设局备案网站高品质外贸网站建设
  • 营销网站制作哪家好洛阳外贸网站推广
  • 手机网站与app广州番禺区美食攻略
  • 做ug图纸的网站网站建设企业站
  • 网站文章多久才收录合作社网站建设
  • 福建泉州网站建设做网站网页的成本
  • 武威网站制作公司服务电话网站怎么做微信登录
  • 网站换空间 seo备案号怎么放到网站
  • 卡易售网站建设信息流投放平台
  • 装修设计公司网站有哪些5g国产天天5g天天
  • 网站内容管理校园网站建设报价
  • 哪个网站系统做的好网站设计原则的第三要素
  • 老区建设网站亚马逊市场营销案例分析
  • 固原建设厅官方网站智慧树网站的章节题做不了
  • 网站建设人才logo设计在线
  • 在网站上做广告教育网站平面设计
  • 中文html网站模板下载做健康类网站怎么备案
  • 何为响应式网站建设公司网站的步骤
  • 网站有哪些分类网游开发公司
  • 织梦网站做瀑布流方便建设网站平台的建议
  • 网站建设实验报告阿里云搭建个人博客wordpress
  • 深圳市福田建设局网站文创产品设计就业前景
  • 龙岗建设网站制作做网站的目的是什么
  • 网站公司做的比较好网站建设业务饱和了吗
  • 做网站做电脑版还是手机版好可以访问国外网站的dns