首页 文章 精选 留言 我的

精选列表

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

3年java开发竟然还不知道Lambda的这个坑

背景 有朋友反馈zk连接很慢。整理出zk连接的关键逻辑如下: 上面的代码造成第一次调用ClientZkAgent.getInstance的时候,需耗时10s, 这个时间恰好跟semaphore的超时时间相当. 在此期间,整个世界好像停滞了一样。 分析 在本地重现后,通过jstack获得系统停滞期间的线程栈,发现这个时候zookeeper的EventThread有个比较奇怪的现象: 客户端实际上很快就连上了zookeeper并返回后生成了SyncConnected事件,而且EventThread已经在回调Watcher.process方法了,但似乎事件线程就一直hold在上面#_1的位置无法往下走, 同时,lambda表达式变成了ClientZkAgent的一个方法了:lambda$connect$0。了解了一下Java中lambda的实现方式,事情水落石出了。 简而言之,jvm会把lambda表达式转换成所在类的一个方法lambda${method}${seq}(method为该lambda所在的方法名,例如上面的connect方法),同时通过动态代理生成一个代理类(该代理类实现了lambda表达式所代表的具体接口),在该代理类中调用lambda${method}${seq}。在上面的例子中,生成的代理类大概如下: 再梳理一下:业务线程:1.通过静态方法ClientZkAgent.getInstance()获取实例,第一次访问的时候会触发类ClientZkAgent的装载。2.装载过程中,装载静态成员instance,这时候会尝试创建一个ClientZkAgent对象。3.在ClientZkAgent的构造函数中连接zk,并通过CountdownLatch进入阻塞状态。注意这时候类装载还没完成。4.CountdownLatch超时后完成对象的初始化以及整个类的加载zk事件线程:SyncConnected事件触发后,调用ClientZkAgent.lambda$connect$0(event), 试图唤醒业务线程(唤醒逻辑在lambda中)。然而这时候ClientZkAgent还没加载完,事件线程只能等待类加载流程的结束。业务线程加载完ClientZkAgent后,事件线程完成事件的处理。可见,在这个过程中,两个线程相互等待(类似死锁但不是死锁),直至业务线程超时后才化解这个局面。欢迎大家关注我的公种浩【程序员追风】,文章都会在里面更新,整理的资料也会放在里面。 解决 修改ClientZkAgent的初始化逻辑如下: 最后欢迎大家一起交流,喜欢文章记得点个赞,感谢支持!

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

在SAP中国研究院里还需要会PHP开发

请原谅Jerry这篇文章的题目有“标题党”的嫌疑。 没错,至少SAP成都研究院的部分团队如此,比如Jerry目前就职的SAP成都研究院数字创新空间。 之前Jerry的文章, 曾经提到SAP Kyma(SAP Extension Factory on SAP Cloud Platform, SAP云平台扩展工厂),是SAP C/4HANA极为重要的扩展工具。 站在巨人肩膀上的牛顿:Kubernetes和SAP Kyma 基于SAP Kyma的订单编排增强介绍 Jerry最近在尝试一个基于Kyma的POC。 一个旅行达人伊森,每游览一个城市后喜欢写一些图文并茂的博客,并上传到社交媒体平台上。伊森同时又是一个社交媒体达人,拥有Twitter,Facebook,Instagram,YouTube等众多平台账号。伊森每次不得不把同一篇博客一次又一次地手

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

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

WebStorm

WebStorm

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

用户登录
用户注册