首页 文章 精选 留言 我的

精选列表

搜索[java],共10000篇文章
优秀的个人博客,低调大师

Java并发编程专题系列之深入分析synchronized(基础篇)

synchronized同步关键字简介 synchronized是属于JVM层面的一个关键字,底层是通过一个monitor对象(管程对象)来完成,由于wait()/notify()等方法也依赖于monitor对象,所以只有在同步的块或者方法中才能调用wait/notify等方法 synchronized同步代码块底层实现 synchronized同步语句块的实现使用monitorenter和 monitorexit 指令。 monitorenter:指令指向同步代码块的开始位置 monitorexit:指令则指明同步代码块的结束位置 synchronized获取锁 当执行monitorenter指令时,当前线程将试图获取objectref(即对象锁) 所对应的 monitor的持有权,当 objectref的monitor 的进入计数器**为0,那线程可以成功取得 monitor,并将计数器值设置为 1,取锁成功。 如果当前线程已经拥有 objectref 的 monitor 的持有权,那它可以重入这个 monitor (关于重入性稍后会分析),重入时计数器的值也会加 1。 倘若其他线程已经拥有objectref 的 monitor 的所有权,那当前线程将被阻塞,直到正在执行线程执行完毕,即monitorexit指令被执行,执行线程将释放monitor(锁)并设置计数器值为0,其他线程将有机会持有 monitor ;** 为了保证在方法异常完成时 monitorenter 和 monitorexit 指令依然可以正确配对执行,编译器会自动产生一个异常处理器,这个异常处理器声明可处理所有的异常,它的目的就是用来执行 monitorexit 指令。 从字节码中也可以看出多了一个monitorexit指令,它就是异常结束时被执行的释放monitor的指令; monitorenter(进入管程对象) 每个对象有一个管程对象(monitor),当monitor被占用时就会处于锁定状态;线程执行monitorenter指令时尝试获取monitor的所有权,过程如下: 如果monitor的进入计数器为0,则该线程进入monitor,然后将进入计数器设置为1,该线程即为monitor的所有者; 如果线程已经之前占用了该monitor,本次只是重新进入,则将monitor的进入计数器加1; 如果其他线程已经占用了monitor,则该线程进入阻塞状态,直到monitor的进入计数器为0,再重新尝试获取monitor的所有权; monitorexit(退出管程对象) 执行monitorexit的线程必须是objectref(即对象锁)所对应的monitor的所有者; 指令执行时,monitor的进入计数器减1,如果减1后进入计数器为0,那线程退出monitor,不再是这个monitor的所有者。其他被这个monitor阻塞的线程可以尝试去获取这个 monitor 的所有权. 同步方法中synchronized底层实现 方法级的同步是隐式,即无需通过字节码指令(monitorenter和monitorexit)来控制的。 它实现在方法调用和返回操作之中。 JVM可以从方法常量池中的方法表结构(method_info Structure) 中的ACC_SYNCHRONIZED访问标志区分一个方法是否同步方法。 当方法调用时,调用指令将会检查方法的 ACC_SYNCHRONIZED 访问标志是否被设置,如果设置了,执行线程将先持有monitor(虚拟机规范中用的是管程一词)。 然后再执行方法,最后在方法完成(无论是正常完成还是非正常完成)时释放monitor。 在方法执行期间,执行线程持有了monitor,其他任何线程都无法再获得同一个monitor。如果一个同步方法执行期间抛出了异常,并且在方法内部无法处理此异常,那这个同步方法所持有的monitor将在异常抛到同步方法之外时自动释放。

优秀的个人博客,低调大师

Apache Solr 8.8.2 发布,Java 企业级搜索引擎

Apache Solr 8.8.2 已发布,Solr 是基于 Lucene 的全文搜索服务器,也是最流行的企业级搜索引擎,其主要功能包括全文检索、命中高亮、分面搜索、动态聚类、数据库集成,以及对富文本(如 Word、PDF)的处理。Solr 高度可扩展,并提供了分布式搜索和索引复制,Solr 4 还增加了 NoSQL 支持。 2010 年,Lucene 和 Solr 项目合并,两个项目均由 Apache 基金会维护。2011 年,Solr 变更版本号方案,与 Lucene 版本号保持一致。 主要更新内容 在 /security.json 上正确设置 ZK ACL 强化 PRS 集合中的 NODEDOWN 事件 在 ConfigurableInternodeAuthHadoopPlugin 中设置 doAs 参数 在 ReplicationHandler 中使用 shardsWhitelist 详情请查看更新公告。

优秀的个人博客,低调大师

Apache Solr 8.8.1 发布,Java 企业级搜索引擎

Apache Solr 8.8.1已发布,Solr 是基于 Lucene 的全文搜索服务器,也是最流行的企业级搜索引擎,其主要功能包括全文检索、命中高亮、分面搜索、动态聚类、数据库集成,以及对富文本(如 Word、PDF)的处理。Solr 高度可扩展,并提供了分布式搜索和索引复制,Solr 4 还增加了 NoSQL 支持。 2010 年,Lucene 和 Solr 项目合并,两个项目均由 Apache 基金会维护。2011 年,Solr 变更版本号方案,与 Lucene 版本号保持一致。 Solr 8.8.1 修复了在没有将 SolrJ 升级到 8.8.0 的情况下将服务器升级到 8.8.0 时的 SolrJ 向后兼容性问题。开发团队鼓励用户使用 8.8.1 而不是 8.8.0。 此版本主要变更内容: SOLR-15145:修复系统属性问题,此属性用于控制是否将 base_url 存储在 state.json 中,以启用与旧 SolrJ 版本的反向兼容 SOLR-15114:修复了在请求最大分数(例如 SolrCloud 中的多分片请求)时导致WAND 优化失效的错误 SOLR-15136:减少使用“每个副本状态” (Per Replica States feature) 功能时引入的过多日志记录 SOLR-15138:针对 PerReplicaStates 的集合创建无法像常规集合那样扩展为大型集合 SOLR-15135:Admin UI 在图形视图中显示 perReplicaState=true 的集合 详情查看 Changelog。 下载地址|升级指南

资源下载

更多资源
Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册