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

电子商务公司的经营范围企业网站优化要多少钱

电子商务公司的经营范围,企业网站优化要多少钱,拦截WordPress请求,成都网络营销搜索推广ThreadLocal介绍 ThreadLocal为每个线程都提供了变量的副本#xff0c;使得每个线程访问各自独立的对象#xff0c;这样就隔离了多个线程对数据的共享#xff0c;使得线程安全。ThreadLocal有如下方法#xff1a; 方法声明 描述public void set(T value)设置当前线程绑定的…ThreadLocal介绍 ThreadLocal为每个线程都提供了变量的副本使得每个线程访问各自独立的对象这样就隔离了多个线程对数据的共享使得线程安全。ThreadLocal有如下方法 方法声明 描述public void set(T value)设置当前线程绑定的局部变量public T get()获取当前线程绑定的局部变量public void remove()移除当前线程绑定的局部变量protected Object initialValue()初始化值 ThreadLocal应用场景 场景一每个线程需要一个独享的对象典型的需要使用的类就是 SimpleDateFormat因为它是线程不安全的 package com.gingko.threadlocal;import java.text.SimpleDateFormat; import java.util.Date; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors;//线程不安全 public class DateUtils1 {private static SimpleDateFormat dateFormat new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);public static String formatDate(long seconds) {Date date new Date(seconds*1000);String format dateFormat.format(date);return format;}public static void main(String[] args) {ExecutorService executorService Executors.newFixedThreadPool(10);for(int i0;i100;i) {int finalI i;/*** 10个线程共享1个SimpleDateFormat会发生线程安全问题,运行结果出现相同的时间*/executorService.submit(()- {try {String formatDate formatDate(finalI);System.out.println(formatDate);Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}});}executorService.shutdown();} }运行结果 分析线程池创建了10个线程处理100个任务10个线程共享1个SimpleDateFormat发生了线程安全问题运行结果出现相同的时间。 改进版本加锁机制 package com.gingko.threadlocal;import java.text.SimpleDateFormat; import java.util.Date; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; //使用锁机制可以解决线程安全问题多线程时等待执行效率较低 public class DateUtils2 {private static SimpleDateFormat dateFormat new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);//使用锁机制多线程时等待执行效率较低public static synchronized String formatDate(long seconds) {Date date new Date(seconds*1000);String format dateFormat.format(date);return format;}public static void main(String[] args) {ExecutorService executorService Executors.newFixedThreadPool(10);for(int i0;i100;i) {int finalI i;/*** 10个线程共享1个SimpleDateFormat*/executorService.submit(()- {try {String formatDate formatDate(finalI);System.out.println(formatDate);Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}});}executorService.shutdown();} }运行结果 分析线程池创建了10个线程处理100个任务10个线程共享1个SimpleDateFormat在formatDate方法上加了锁使得多个线程同时执行此方法时需要排队等待获取锁执行结果没有问题但是由于要等待获取锁执行效率低。 改进版本使用ThreadLocal package com.gingko.threadlocal;import java.text.SimpleDateFormat; import java.util.Date; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; //使用threadlocal,使得每个线程有各个独立的SimpleDateFormat public class DateUtils3 {//使用threadlocal,使得每个线程有各个独立的SimpleDateFormatprivate static ThreadLocalSimpleDateFormat dateFormatThreadLocal ThreadLocal.withInitial(()- {return new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);});public static String formatDate(long seconds) {Date date new Date(seconds*1000);String format dateFormatThreadLocal.get().format(date);return format;}public static void main(String[] args) {ExecutorService executorService Executors.newFixedThreadPool(10);for(int i0;i100;i) {int finalI i;/*** 10个线程有各自独立的SimpleDateFormat不会发生线程安全问题*/executorService.submit(()- {try {String formatDate formatDate(finalI);System.out.println(formatDate);Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}});}executorService.shutdown();} }运行结果 分析线程池创建了10个线程处理100个任务10个线程独占各自的SimpleDateFormat执行结果没有问题没有锁机制执行效率高。 场景二替代参数链传递 上图中通过前台获取到用户信息后一路向下传递假设方法A、B、C都需要用户信息一种方式是A、B、C方法都接收用户信息作为入参非常繁琐一种方式是将用户信息放入ThreadLocal中这样线程链上的所有方法都可以获取到用户信息不用在方法A、B、C显式的指定User Info的入参类似的应用场景还有前台传递的分页参数等。 package com.gingko.threadlocal;import com.gingko.entity.Student;public class TransferParam {//线程中放入student信息整个线程链路上都可以获取student信息private static ThreadLocalStudent studentThreadLocal new ThreadLocal();public static void main(String[] args) {TransferParam transferParam new TransferParam();transferParam.setParam();}public void setParam() {Student student new Student(1,张三,18,001);studentThreadLocal.set(student);new ServiceA().getParam();}class ServiceA {public void getParam() {Student student studentThreadLocal.get();System.out.println(ServiceA: student);new ServiceB().getParam();}}class ServiceB {public void getParam() {Student student studentThreadLocal.get();System.out.println(ServiceB: student);//线程链路的最后删除threadlocal信息防止发生内存泄露studentThreadLocal.remove();}} }运行结果 从结果上看出在方法setParam设置了ThreadLocal的变量student在其线程调用的链条上方法ServiceA.getParam 和ServiceB.getParam 都可以获取到student 注意在线程链最后的方法上记得调用ThreadLocal的remove方法不然会出现内存泄漏的风险这块内容后续的章节会介绍。
http://www.dnsts.com.cn/news/3504.html

相关文章:

  • 购物网站如何推广阿里巴巴网站建设方案
  • 做拍卖网站有哪些可以做填字游戏的网站
  • 怎么利用个人网站佛山网站推广 优帮云
  • 网站原创文章不收录苏州关键词排名提升
  • 网站免费正能量软件不良江苏电信网站备案
  • 青岛网站搭建公司易网网站
  • 如何装修设计自己的房子河北网站seo
  • 北京哪里有教怎么做网站的太原本地网站
  • 做外贸一般用哪些网站互联网是网络营销的媒体
  • 开发网站公司地址苏州优化网站排名
  • 无锡网站建设品牌大全建设小说网站首页
  • 大连专业企业建站找哪家哈尔滨网络优化推广公司
  • 湛江网站制作费用大理建设局网站
  • 企业营销型网站建设优惠合肥有哪些公司是做网站的
  • 成都网站建设 工作室wordpress 主题单页
  • 制作视频网站开发网站建设在线培训
  • 网站建设国内排行深圳坑梓网站建设
  • 线上企业订单管理系统网站安徽建工集团招标信息集采平台
  • 企业大型网站开发适合大型网站的流量套餐
  • 网站开发的理解同ip网站怎么做
  • 网站开发的报告动漫制作专业
  • 网络营销的看法和理解石家庄百度推广排名优化
  • 徐州网站建设多少钱五金配件东莞网站建设技术支持
  • 建立网站目录结构应遵循的方法和建议佛山优化网站方法
  • win10 建网站露兜博客 wordpress
  • 千图素材网站网站开发合作协议书
  • 网站专题页陈村网站设计
  • 青岛主流网站互联网保险公司排行榜
  • 衡阳网站开发阿里巴巴国际站app
  • 为什么网站要备案宁波网站推广优化联系电话