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

室内空间设计案例长沙网站优化收费

室内空间设计案例,长沙网站优化收费,有了网站源码 怎么建设网站,wordpress文章分类目录多线程的缘由 在出现了进程之后#xff0c;操作系统的性能得到了大大的提升。虽然进程的出现解决了操作系统的并发问题#xff0c;但是人们仍然不满足#xff0c;人们逐渐对实时性有了要求。 使用多线程的理由之一是和进程相比#xff0c;它是一种非常花销小#xff0c;切… 多线程的缘由 在出现了进程之后操作系统的性能得到了大大的提升。虽然进程的出现解决了操作系统的并发问题但是人们仍然不满足人们逐渐对实时性有了要求。 使用多线程的理由之一是和进程相比它是一种非常花销小切换快更”节俭”的多任务操作方式。 在Linux系统下启动一个新的进程必须分配给它独立的地址空间建立众多的数据表来维护它的代码段、堆栈段和数据段这是一种”昂贵”的多任务工作方式。而在进程中的同时运行多个线程它们彼此之间使用相同的地址空间共享大部分数据启动一个线程所花费的空间远远小于启动一个进程所花费的空间而且线程间彼此切换所需的时间也远远小于进程间切换所需要的时间。 多线程并发面临的问题 由于多个线程是共同占有所属进程的资源和地址空间的那么就会存在一个问题 如果多个线程要同时访问某个资源怎么处理 在Java并发编程中经常遇到多个线程访问同一个 共享资源 这时候作为开发者必须考虑如何维护数据一致性这就是Java锁机制同步问题的来源。 Java提供了多种多线程锁机制的实现方式常见的有 synchronized ReentrantLock Semaphore AtomicInteger等 每种机制都有优缺点与各自的适用场景必须熟练掌握他们的特点才能在Java多线程应用开发时得心应手。 4种Java线程锁线程同步 1.synchronized 在Java中synchronized关键字被常用于维护数据一致性。 synchronized机制是给共享资源上锁只有拿到锁的线程才可以访问共享资源这样就可以强制使得对共享资源的访问都是顺序的。 Java开发人员都认识synchronized使用它来实现多线程的同步操作是非常简单的只要在需要同步的对方的方法、类或代码块中加入该关键字它能够保证在同一个时刻最多只有一个线程执行同一个对象的同步代码可保证修饰的代码在执行过程中不会被其他线程干扰。使用synchronized修饰的代码具有原子性和可见性在需要进程同步的程序中使用的频率非常高可以满足一般的进程同步要求。 synchronized obj { //方法 ……. } synchronized实现的机理依赖于软件层面上的JVM因此其性能会随着Java版本的不断升级而提高。 到了Java1.6synchronized进行了很多的优化有适应自旋、锁消除、锁粗化、轻量级锁及偏向锁等效率有了本质上的提高。在之后推出的Java1.7与1.8中均对该关键字的实现机理做了优化。 需要说明的是当线程通过synchronized等待锁时是不能被Thread.interrupt中断的因此程序设计时必须检查确保合理否则可能会造成线程死锁的尴尬境地。 最后尽管Java实现的锁机制有很多种并且有些锁机制性能也比synchronized高但还是强烈推荐在多线程应用程序中使用该关键字因为实现方便后续工作由JVM来完成可靠性高。只有在确定锁机制是当前多线程程序的性能瓶颈时才考虑使用其他机制如ReentrantLock等。 2.ReentrantLock 可重入锁顾名思义这个锁可以被线程多次重复进入进行获取操作。 ReentantLock继承接口Lock并实现了接口中定义的方法除了能完成synchronized所能完成的所有工作外还提供了诸如可响应中断锁、可轮询锁请求、定时锁等避免多线程死锁的方法。 Lock实现的机理依赖于特殊的CPU指定可以认为不受JVM的约束并可以通过其他语言平台来完成底层的实现。在并发量较小的多线程应用程序中ReentrantLock与synchronized性能相差无几但在高并发量的条件下synchronized性能会迅速下降几十倍而ReentrantLock的性能却能依然维持一个水准。 因此我们建议在高并发量情况下使用ReentrantLock。 ReentrantLock引入两个概念公平锁与非公平锁。 公平锁指的是锁的分配机制是公平的通常先对锁提出获取请求的线程会先被分配到锁。反之JVM按随机、就近原则分配锁的机制则称为不公平锁。 ReentrantLock在构造函数中提供了是否公平锁的初始化方式默认为非公平锁。这是因为非公平锁实际执行的效率要远远超出公平锁除非程序有特殊需要否则最常用非公平锁的分配机制。 ReentrantLock通过方法lock与unlock来进行加锁与解锁操作与synchronized会被JVM自动解锁机制不同ReentrantLock加锁后需要手动进行解锁。为了避免程序出现异常而无法正常解锁的情况使用ReentrantLock必须在finally控制块中进行解锁操作。通常使用方式如下所示 Lock lock new ReentrantLock; try { lock.lock; //…进行任务操作5 } finally { lock.unlock; } 3.Semaphore 上述两种锁机制类型都是“互斥锁”学过操作系统的都知道互斥是进程同步关系的一种特殊情况相当于只存在一个临界资源因此同时最多只能给一个线程提供服务。但是在实际复杂的多线程应用程序中可能存在多个临界资源这时候我们可以借助Semaphore信号量来完成多个临界资源的访问。 Semaphore基本能完成ReentrantLock的所有工作使用方法也与之类似通过acquire与release方法来获得和释放临界资源。 经实测Semaphone.acquire方法默认为可响应中断锁与ReentrantLock.lockInterruptibly作用效果一致也就是说在等待临界资源的过程中可以被Thread.interrupt方法中断。 此外Semaphore也实现了可轮询的锁请求与定时锁的功能除了方法名tryAcquire与tryLock不同其使用方法与ReentrantLock几乎一致。Semaphore也提供了公平与非公平锁的机制也可在构造函数中进行设定。 Semaphore的锁释放操作也由手动进行因此与ReentrantLock一样为避免线程因抛出异常而无法正常释放锁的情况发生释放锁的操作也必须在finally代码块中完成。 4.AtomicInteger 首先说明此处AtomicInteger是一系列相同类的代表之一常见的还有AtomicLong、AtomicLong等他们的实现原理相同区别在与运算对象类型的不同。 我们知道在多线程程序中诸如i 或 i等运算不具有原子性是不安全的线程操作之一。通常我们会使用synchronized将该操作变成一个原子操作但JVM为此类操作特意提供了一些同步类使得使用更方便且使程序运行效率变得更高。通过相关资料显示通常AtomicInteger的性能是ReentantLock的好几倍。 Java线程锁总结 1.synchronized 在资源竞争不是很激烈的情况下偶尔会有同步的情形下synchronized是很合适的。原因在于编译程序通常会尽可能的进行优化synchronize另外可读性非常好。 2.ReentrantLock: 在资源竞争不激烈的情形下性能稍微比synchronized差点点。但是当同步非常激烈的时候synchronized的性能一下子能下降好几十倍而ReentrantLock确还能维持常态。 高并发量情况下使用ReentrantLock。 3.Atomic: 和上面的类似不激烈情况下性能比synchronized略逊而激烈的时候也能维持常态。激烈的时候Atomic的性能会优于ReentrantLock一倍左右。但是其有一个缺点就是只能同步一个值一段代码中只能出现一个Atomic的变量多于一个同步无效。因为他不能在多个Atomic之间同步。 所以我们写同步的时候优先考虑synchronized如果有特殊需要再进一步优化。ReentrantLock和Atomic如果用的不好不仅不能提高性能还可能带来灾难。 以上就是Java线程锁的详解除了从编程的角度应对高并发更多还需要从架构设计的层面来应对高并发场景例如Redis缓存、CDN、异步消息等详细的内容如下。 更多高并发架构设计|以及最全架构师130题|以及优知学院最全架构师技能高清图 所有以上资料获取方式 关注优知学院微信公众号回复关键词 【架构师】即可获取以上所有架构师资料。 你可能也喜欢: Java多线程系列十一ReentrantReadWriteLock的实现原理与锁获取详解 Java多线程系列七并发容器的原理7大并发容器详解、及使用场景 Java多线程系列六深入详解Synchronized同步锁的底层实现 Java多线程系列九CountDownLatch、Semaphore等4大并发工具类详解 Java多线程系列一最全面的Java多线程学习概述 Java多线程系列十源码剖析AQS的实现原理
http://www.zqtcl.cn/news/458950/

相关文章:

  • 用dedecms做的网站电子商务公司名称大全简单大气
  • 网站建设的业务员wordpress font awesome
  • 艺术公司网站定制中心怎么搜索网站搜索量
  • 陕西网站建设设计公司西部数码网站管理助手破解版
  • 网站建设框架构建正规的app网站开发
  • 离退休工作网站建设方案wordpress在线浏览pdf
  • 昆明免费网站制作wordpress自定义路由
  • html5视频网站开发江西响应式网站制作
  • 网站照片加水印家装公司十大口碑排名
  • 做网站还有用PHP网站开发如何建立vip
  • 东莞广告公司东莞网站建设辽宁城乡建设部网站
  • 公司网站开发详细流程php网站开发优点
  • 广东网站建设多少钱比较大气的网站
  • asp.net怎么做登录网站网站建设服务网络服务
  • 网站备案级别做公司网站要多少钱
  • 湛江网站seo网站定制排名
  • 为什么网站之有首页被收录企业网站发布图片文章
  • 做网站要准备内蒙做网站
  • 邯郸市搞网站服务务的吗网站建设怎么在图片上加字
  • 卡片风格网站我想做跑腿网站怎么做
  • 公司网站建设前期情况说明如何找厂家地址
  • 超值的郑州网站建设wordpress 移除 新闻
  • 长春网络营销网站徐州手机模板建站
  • 微网站开发+在线商城建设局招标网站
  • 网站开发的基本过程关岭做网站
  • 高端网站哪种好WordPress媒体库丢失
  • 澄迈网站新闻建设宣传视频
  • 南昌优化网站排名公司建设网站的步骤
  • 一个人做网站wordpress如何加链接
  • 查网站服务器所在地笔记本电脑安装wordpress