首页 文章 精选 留言 我的

精选列表

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

sqltoy-orm-4.17.2 发版,部分功能优化

开源地址: github:https://github.com/sagframe/sagacity-sqltoy gitee:https://gitee.com/sagacity/sagacity-sqltoy idea 插件(可直接在idea中检索安装):https://github.com/threefish/sqltoy-idea-plugins 更新内容 1、优化update(entity,forceUpdateFields) 强制属性优先于统一字段处理 2、 为org.sagacity.sqltoy.plugins.datasource.ObtainDataSource 接口方法增加了一个参数,便于今后扩展 3、 findEntity 放开条件限制,允许无查询条件查询 4、 sql查询或executeSql对象传参时,sql中的参数变量支持:xxxx.xxxx 支持子对象属性读取 5、quickvo工具支持extends指定继承父类,entity和vo都支持该属性 <task active="true" author="zhangsan" include="^SYS_\w+" datasource="strict" swagger-model="true"> <entity package="${project.package}.system.entity" substr="Sys" name="#{subName}"/> <vo package="${project.package}.system.dto" substr="Sys" name="#{subName}VO" extends="com.sagframe.model.Request"/> </task>

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

Executors功能如此强大,ThreadPoolExecutor功不可没(一)

作为 Java 程序员,无论是技术面试、项目研发或者是学习框架源码,不彻底掌握 Java 多线程的知识,做不到心中有数,干啥都没底气,尤其是技术深究时往往略显发憷。 在 JDK1.5 以前,研发人员在面对线程频繁调度的场景,必须手动打造线程池,来节约系统开销(画外音:真是吃了不少苦头)。 从 JDK1.5 开始,Java 提供了一个 Excutors 工厂类来生产线程池,可以帮助研发人员有效的进行线程控制(画外音:不用造轮子啦,爽歪歪)。 (配图释义:JDK 1.8 能用 Excutors 创建的线程池) 如上图示意,Excutors 提供了满足各种场景的线程池创建方式,Java研发人员就不用苦逼哈哈的去造轮子啦,谁用谁爽。 但是,阿里开发规约明确强制研发人员:线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式。 (配图释义:阿里巴巴Java开发手册,线程池创建规约) 不过,若经常关注源码的同学会发现,无论是 newFixedThreadPool() 方法、newSingleThreadExecutor() 方法,还是 newCachedThreadPool() 方法,其背后均使用了 ThreadPoolExecutor。 (配图释义:JDK 1.8 能用 Excutors 创建的线程池的背后) 通过上面源码截图,可以清晰看出,以上几种创建线程池的方式,均是对 ThreadPoolExecutor 类的封装,所以要想彻底掌握线程池,势必要吃透线程池背后的ThreadPoolExecutor。 1 解剖:构造函数 有关 ThreadPoolExecute 构造函数,很多书上或者文章都会提到,下面再简单了解一下每个参数的具体含义。 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler) 构造函数的参数释义: corePoolSize:指定线程池中的线程数量; maximumPoolSize:指定线程池中的最大线程数量; keepAliveTime:当线程池中线程数量超过 corePoolSize 时,空闲线程的存活时间; unit:keepAliveTime 的单位; workQueue:任务队列,存放提交尚未被执行的任务; threadFactory:线程工厂,用于创建线程,一般用默认的即可; handler:拒绝策略,当任务太多来不及处理,如何拒绝任务。 以上参数除了 workQueue 以及 handler 外,大部分都很易懂。接下来重点说说 workQueue 以及 handler 两个参数。 参数BlockingQueue<Runnable> workQueue,是用于存放提交尚未被执行的任务的队列,类型是 BlockingQueue 接口的对象,用于存放 Runnable 对象。 参数RejectedExecutionHandler handler 是指当任务数量超过系统承载能力时,该如何处理?其中 JDK 提供了四种拒绝策略。 (配图释义:JDK 1.8 内置的拒绝策略) JDK 提供的四种拒绝策略归纳,简单了解一下。 2 思考:使用 Executors 会导致 OOM? 了解完 ThreadPoolExecutor 类的构造函数,接下来探讨一下阿里开发手册明确强制的一条使用线程池的规约。 为了更清晰的认识,不妨走进源码看一看。首先走进 newFixedThreadPool() 方法的源码,一探究竟。 如源码截图所示,newFixedThreadPool() 方法的实现,返回一个 corePoolSize 和 maximumPoolSize 大小一样的,并且使用了 LinkedBlockingQueue 任务队列的线程池。 如上面LinkedBlockingQueue 的源码所示,队列的默认长度为 Integer.MAX_VALUE,那么当任务提交频繁时,线程池中的线程处理不过来时,队列可能会迅速膨胀,从而会出现 OOM。 接着走进 newSingleThreadExecutor() 方法的源码,看看有没有新大陆。 如源码截图示意,newSingleThreadExecutor 方法实现中,corePoolSize 和 maximumPoolSize 设置的值均为 1,返回一个单线程的线程池,并且使用 LinkedBlockingQueue 任务队列来存在提交的任务,与newFixedThreadPool() 方法一样,当任务提交频繁时,线程池中的线程处理不过来时,队列会迅速膨胀,从而会出现 OOM。 最后看看newCachedThreadPool() 方法的源码实现,一探究竟。 如上图源码示意,newCachedThreadPool()方法实现,返回了一个corePoolSize 为 0,maximumPoolSize 的值为Integer.MAX_VALUE,并且使用 SynchronousQueue 作为任务队列的线程池。 而 SynchronousQueue队列是一种直接提交的队列(不会保存提交的任务),所以总会使线程池增加新的线程来执行任务,当任务执行完毕后,由于 corePoolSize 为 0,因此空闲线程又会在 60 秒内被回收。 如果同时有大量任务被提交,而任务的执行又不那么快时,newCachedThreadPool() 方法,便会开启大量的线程进行处理,这样可能很快耗尽系统的资源,进而导致 OOM。 3 寄语写最后 本次,主要引入线程池背后的ThreadPoolExecutor 类,算是正式开启探寻线程池背后的奥秘之旅,先有个初步的认识,知其然知其所以然,后续会逐步深入。 好了,本次就谈到这里, 一起聊技术、谈业务、喷架构,少走弯路,不踩大坑。会持续输出原创精彩分享,敬请期待! 推荐阅读: 彻底搞懂 Java 线程池,干啥都不再发憷 Java程序跑的快,全要靠线程带 fastjson的这些坑,你误入了没? 真实|技术人员该如何站好最后一班岗? Java 8 的这些特性,你知道吗? 改掉这些坏习惯,还怕写不出健壮的代码?(一) 改掉这些坏习惯,还怕写不出优雅的代码? (二) 改掉这些坏习惯,还怕写不出优雅的代码? (三) 改掉这些坏习惯,还怕写不出健壮的代码? (四) 改掉这些坏习惯,还怕写不出精简的代码? (五) 改掉这些坏习惯,还怕写不出精简的代码? (六) 坚持是一种信仰,在看是一种态度! 本文分享自微信公众号 - 一猿小讲(yiyuanxiaojiangV5)。如有侵权,请联系 support@oschina.cn 删除。本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

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

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文件系统,支持十年生命周期更新。

用户登录
用户注册