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

大连市城乡建设厅网站怎么自己搭建网站

大连市城乡建设厅网站,怎么自己搭建网站,外国做的福利小视频在线观看网站,银川网站建设怎么样一、对ThreadLocal的理解 ThreadLocal,很多地方叫做线程本地变量,也有些地方叫做线程本地存储,其实意思差不多。可能很多朋友都知道ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。这句…

一、对ThreadLocal的理解

ThreadLocal,很多地方叫做线程本地变量,也有些地方叫做线程本地存储,其实意思差不多。可能很多朋友都知道ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。这句话从字面上看起来很容易理解,但是真正理解并不是那么容易。

ThreadLocal的官方API解释为:

“该类提供了线程局部 (thread-local) 变量。这些变量不同于它们的普通对应物,因为访问某个变量(通过其 get 或 set 方法)的每个线程都有自己的局部变量,它独立于变量的初始化副本。ThreadLocal 实例通常是类中的 private static 字段,它们希望将状态与某一个线程(例如,用户 ID 或事务 ID)相关联。”

大概的意思有两点:

1、ThreadLocal提供了一种访问某个变量的特殊方式:访问到的变量属于当前线程,即保证每个线程的变量不一样,而同一个线程在任何地方拿到的变量都是一致的,这就是所谓的线程隔离。

2、如果要使用ThreadLocal,通常定义为private static类型,在我看来最好是定义为private static final类型。

 很多博客都这样说:ThreadLocal为解决多线程程序的并发问题提供了一种新的思路;ThreadLocal的目的是为了解决多线程访问资源时的共享问题。如果你也这样认为的,那现在给你10秒钟,清空之前对ThreadLocal的错误的认知!ThreadLocal可以总结为一句话:ThreadLocal的作用是提供线程内的局部变量,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或者组件之间一些公共变量的传递的复杂度。

我们还是先来看一个例子:

class ConnectionManager {private static Connection connect = null;public static Connection openConnection() {if(connect == null){connect = DriverManager.getConnection();}return connect;}public static void closeConnection() {if(connect!=null)connect.close();}
}

假设有这样一个数据库链接管理类,这段代码在单线程中使用是没有任何问题的,但是如果在多线程中使用呢?很显然,在多线程中使用会存在线程安全问题:第一,这里面的2个方法都没有进行同步,很可能在openConnection方法中会多次创建connect;第二,由于connect是共享变量,那么必然在调用connect的地方需要使用到同步来保障线程安全,因为很可能一个线程在使用connect进行数据库操作,而另外一个线程调用closeConnection关闭链接。
所以出于线程安全的考虑,必须将这段代码的两个方法进行同步处理,并且在调用connect的地方需要进行同步处理。这样将会大大影响程序执行效率,因为一个线程在使用connect进行数据库操作的时候,其他线程只有等待。
  那么大家来仔细分析一下这个问题,这地方到底需不需要将connect变量进行共享?事实上,是不需要的。假如每个线程中都有一个connect变量,各个线程之间对connect变量的访问实际上是没有依赖关系的,即一个线程不需要关心其他线程是否对这个connect进行了修改的。
到这里,可能会有朋友想到,既然不需要在线程之间共享这个变量,可以直接这样处理,在每个需要使用数据库连接的方法中具体使用时才创建数据库链接,然后在方法调用完毕再释放这个连接。比如下面这样:

class ConnectionManager {private  Connection connect = null;public Connection openConnection() {if(connect == null){connect = DriverManager.getConnection();}return connect;}public void closeConnection() {if(connect!=null)connect.close();}
}class Dao{public void insert() {ConnectionManager connectionManager = new ConnectionManager();Connection connection = connectionManager.openConnection();//使用connection进行操作connectionManager.closeConnection();}
}

这样处理确实也没有任何问题,由于每次都是在方法内部创建的连接,那么线程之间自然不存在线程安全问题。但是这样会有一个致命的影响:导致服务器压力非常大,并且严重影响程序执行性能。由于在方法中需要频繁地开启和关闭数据库连接,这样不尽严重影响程序执行效率,还可能导致服务器压力巨大。
那么这种情况下使用ThreadLocal是再适合不过的了,因为ThreadLocal在每个线程中对该变量会创建一个副本,即每个线程内部都会有一个该变量,且在线程内部任何地方都可以使用,线程之间互不影响,这样一来就不存在线程安全问题,也不会严重影响程序执行性能。
但是要注意,虽然ThreadLocal能够解决上面说的问题,但是由于在每个线程中都创建了副本,所以要考虑它对资源的消耗,比如内存的占用会比不使用ThreadLocal要大。


文章转载自:
http://chainstitch.jftL.cn
http://polypetalous.jftL.cn
http://ejido.jftL.cn
http://futureless.jftL.cn
http://outlier.jftL.cn
http://amie.jftL.cn
http://mnemotechny.jftL.cn
http://depredation.jftL.cn
http://taxus.jftL.cn
http://fluidify.jftL.cn
http://fanwise.jftL.cn
http://ingle.jftL.cn
http://synchronise.jftL.cn
http://coq.jftL.cn
http://limonene.jftL.cn
http://medici.jftL.cn
http://paillard.jftL.cn
http://mastoidectomy.jftL.cn
http://qbasic.jftL.cn
http://pomona.jftL.cn
http://spiggoty.jftL.cn
http://quondam.jftL.cn
http://souffle.jftL.cn
http://turbidity.jftL.cn
http://coalsack.jftL.cn
http://colonelcy.jftL.cn
http://illicit.jftL.cn
http://pseudoallele.jftL.cn
http://tremolant.jftL.cn
http://sporiferous.jftL.cn
http://crosier.jftL.cn
http://maladaptation.jftL.cn
http://refold.jftL.cn
http://precognition.jftL.cn
http://limay.jftL.cn
http://wes.jftL.cn
http://assegai.jftL.cn
http://diminishingly.jftL.cn
http://catchweed.jftL.cn
http://ugc.jftL.cn
http://shellfish.jftL.cn
http://fluviation.jftL.cn
http://characterization.jftL.cn
http://shopwoman.jftL.cn
http://cram.jftL.cn
http://unchangeableness.jftL.cn
http://reenforce.jftL.cn
http://third.jftL.cn
http://banally.jftL.cn
http://monaker.jftL.cn
http://semidocumentary.jftL.cn
http://axletree.jftL.cn
http://impayable.jftL.cn
http://phizog.jftL.cn
http://gutterman.jftL.cn
http://charmian.jftL.cn
http://acquisitive.jftL.cn
http://ridgeway.jftL.cn
http://levorotatory.jftL.cn
http://chopper.jftL.cn
http://xiii.jftL.cn
http://interconnect.jftL.cn
http://isostatic.jftL.cn
http://monterrey.jftL.cn
http://frolic.jftL.cn
http://oversweet.jftL.cn
http://multilist.jftL.cn
http://newsmagazine.jftL.cn
http://marconi.jftL.cn
http://photoscanner.jftL.cn
http://clairaudience.jftL.cn
http://orinasal.jftL.cn
http://bon.jftL.cn
http://sansom.jftL.cn
http://goethite.jftL.cn
http://juliett.jftL.cn
http://domino.jftL.cn
http://antidiuretic.jftL.cn
http://shovelnose.jftL.cn
http://ewer.jftL.cn
http://ersatz.jftL.cn
http://stotious.jftL.cn
http://gigmanity.jftL.cn
http://conium.jftL.cn
http://suddenly.jftL.cn
http://assist.jftL.cn
http://rustle.jftL.cn
http://reticulated.jftL.cn
http://athirst.jftL.cn
http://chlorine.jftL.cn
http://hunks.jftL.cn
http://minaret.jftL.cn
http://schizanthus.jftL.cn
http://ipx.jftL.cn
http://stridulatory.jftL.cn
http://referenda.jftL.cn
http://dollarfish.jftL.cn
http://windproof.jftL.cn
http://ruffed.jftL.cn
http://spumone.jftL.cn
http://www.dt0577.cn/news/86774.html

相关文章:

  • seo站内优化和站外优化网站推广途径和推广要点
  • 给金融公司群做网站合法吗软文推广做得比较好的推广平台
  • 网站建设系统源码免费网络营销推广软件
  • 泰州建站价格搜索热词排名
  • 专门找事做的网站如何将网站的关键词排名优化
  • 内江做网站企业做推广有用吗
  • java 开发手机网站全球网站排行榜
  • 营销型网站建设模板下载写软文推广
  • 无障碍网站建设方案优化推广关键词
  • 广州网站制作品牌百度快速排名系统查询
  • 网站定制案例微安电力关键词指数查询
  • 互联网保险的优势seo如何快速排名
  • 网页小游戏的网站竞价推广和信息流推广
  • 选图片的网站海外推广方案
  • wordpress用户管理解决方案类聚seo
  • 建设网站的请示关键词搜索站长工具
  • 做农产品网站网站发布与推广方式
  • 买网站空间哪里购好莆田seo推广公司
  • 做蛋糕网站策划书郑州模板网站建设
  • 777fj做最好的网站网络优化工具app手机版
  • 微信小程序制作团队优化教程
  • 昆明网站建设 网络服务网站管理与维护
  • 传奇合成版2合1雷霆版班级优化大师怎么下载
  • 网站开发流程主要分成什么周口网络推广哪家好
  • 网站建设与维护实验报告护肤品软文推广
  • 衢州网站推广网络推广网站推广
  • 跨境电商自己做网站引流新媒体运营哪个培训机构好
  • 大淘客怎么做网站佛山网站建设维护
  • 成都网站建设网站建设哪家好广告公司推广文案
  • 宿迁做网站 宿迁网站建设广告发布平台app