调度Java应用程序中的主体

许多项目需要计划功能,例如我们计划的工作,重复的工作,异步执行等。

我们的首选方法是使用企业工作调度程序,例如OpenSymphony的Quartz。

使用计划任务进行编码时,最棘手的部分之一是执行部分。 这里的主要经验法则是注意将要执行的实际代码。 调度框架在后台使用工作线程,以便异步执行代码。 例如,Quartz企业作业调度程序维护一个由主“控制器”线程监控的工作线程池。

您应该记住,调度的作业本质上是异步的,因此引入异步执行层是我们表示保持工作整洁的首选方式。

在过去的很多次中,我们都遇到了这样的难题:让调度框架工作线程执行实际代码,或者实现替代的异步执行层。 每种方法都有其优点和缺点。

使用调度框架执行实际代码,优点:

  1. 需要更少的实施工作
  2. 工作线程由框架“控制器”线程监视
  3. 实施代码在准确的预定时间执行

使用调度框架执行实际代码,缺点:

  1. 实现代码与调度框架共存
  2. 对于“长期存在”的实现代码,例如与外部系统的通信,“繁忙时间”的数据库查询,文件解析,循环等,会引起主要问题,您可能会用尽调度框架工作线程的时间,尤其是在这种情况下在短时间间隔内重复工作。

我们想认为调度框架应该充当“调度程序”而不是“执行者”。 计划框架的主要职责应该是在适当的时间“触发”执行事件。 应使用事件侦听器执行代码的实际执行。

实现此设计模式的最佳方法是使用异步JMS消息传递。 调度框架工作线程应在执行时将消息插入JMS队列。 JMS侦听器线程应在收到消息后执行实际代码。 这样做会由于JMS的读/写开销而在实际代码执行之前引入一些延迟,但是“长期存在”的实现代码不会对调度框架造成任何问题。


翻译自: https://www.javacodegeeks.com/2010/05/scheduling-principals-in-java.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/374625.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

继承映射关系 joinedsubclass的查询

会出现下面这样的错一般是配置文件中的mapping和映射文件中的package路径或者class中的name路径不一致 org.hibernate.MappingException: Unknown entity: com.zh.hibernate.joinedsubclass.Student at org.hibernate.internal.SessionFactoryImpl.getEntityPersister(Sessi…

Spark系列—02 Spark程序牛刀小试

一、执行第一个Spark程序 1、执行程序 我们执行一下Spark自带的一个例子,利用蒙特卡罗算法求PI: 启动Spark集群后,可以在集群的任何一台机器上执行一下命令: /home/spark/spark-1.6.1-bin-hadoop2.6/bin/spark-submit \ --class o…

JVM选项:-client vs -server

您是否曾经在运行Java应用程序时想知道-client或-server开关是什么? 例如: javaw.exe -client com.blogspot.sdoulger.LoopTest也显示在java.exe的“帮助”中,例如,其中的选项包括: -client选择“客户端” VM -serv…

网页前台小知识

1.左右布局div块自适应,首先外边套一个div,把宽度固定一个px,然后margin设为0 atuo;这样他会根据窗口大小自动变换左右距离.就这么简单</p> 2.多个标签共用一个样式,用,分隔开 p…

统计字符串每个字符出现的次数

//str是个只包含小写字母的字符串&#xff0c;以下是统计每个字符出现的频数 int[] cnt new int[26];//toCharArray() for (char ch : str.toCharArray()) {cnt[ch - a]; }//charAt() for(int i 0;i<str.length;i){char ch str.charAt(i);cnt[ch - a]; }

在Java 7中处理文件

以下是The Well-Grounded Java Developer的草稿的修改后的片段。 它使您快速了解与以前版本相比&#xff0c;在Java 7中操作文件要容易得多。 通过使用新的Files类及其许多实用程序方法&#xff0c;您可以仅用一行代码就可以对文件执行以下操作&#xff1a; 创建 删除 复制 …

3.1存储管理操作系统

存储器管理的对象是主存&#xff08;内存&#xff09;。其主要功能包含分配和回收主存空间、提高主存的利用率、扩充主存、对主存信息实现有效保护。存储器的结构为&#xff1a;寄存去、缓存、主存、外存。逻辑地址&#xff08;对用户角度。程序存放的位置&#xff09;、物理地…

学习教材《构建之法》遇到的问题及思路

在学习中每个人都会遇到各种各样的问题&#xff0c;下面就是我遇到的问题及可能解决问题的思路。 1.如何写好程序的注释&#xff0c;每个人都会写注释&#xff0c;但是&#xff0c;需要注释什么&#xff1f; 思路&#xff1a;注释是为了解释程序做什么&#xff0c;为什么要这样…

了解和扩展Java ClassLoader

Java ClassLoader是项目开发中Java的关键但很少使用的组件之一。 就我个人而言&#xff0c;我从未在任何项目中扩展ClassLoader&#xff0c;但是拥有自己的可以自定义Java类加载的ClassLoader的想法让我感到很兴奋。 本文将概述Java类加载&#xff0c;然后继续创建自定义ClassL…

CAD教程-AL对其命令

AL可以实现不规则的对其功能 1.第一步按下AL&#xff0c;按下Enter 2.选择第一个源点 3.选择第一个目标点 4.选择第二个源点 5.选择第二个目标点 6.按下Enter&#xff0c;完成移位 转载于:https://www.cnblogs.com/weloveshare/p/4739873.html

使用Spring将POJO公开为JMX MBean

这是一个非常不错的教程&#xff0c;介绍了如何通过我们最新的JCG合作伙伴 “ The Holy Java ”博客&#xff08;很酷的名字&#xff09;实现“ 用Spring轻松将POJO作为JMX MBean公开 ”。 &#xff08;注意&#xff1a;对原始帖子进行了少量编辑以提高可读性&#xff09; Jav…

mysql 5.1由于Host为localhost的用户为空,密码为空,导致本地用户无法登陆。

不说了。直接上mysql的用户数据&#xff0c;第四列里面&#xff0c;host为localhost&#xff0c;用户为空&#xff0c;密码为空。 导致在本地登陆的时候除了root的账户外&#xff0c;其他账号不需要密码即可登陆&#xff0c;并且影响host为 %的用户登陆。 这里只需要删除对应的…

scala 88 for替换map,flatmap,filtermap,for,scala,flatmap

王家林亲授《DT大数据梦工厂》大数据实战视频“Scala深入浅出实战经典”视频、音频和PPT下载&#xff01;第88讲&#xff1a;Scala中使用For表达式实现map、flatMap、filter百度云盘&#xff1a;http://pan.baidu.com/s/1mgtgcIG360云盘&#xff1a;http://yunpan.cn/cdXsbctXf…

简单阐述下OC中UIImage三种创建方式~~~

一. 直接使用imageNamed进行创建 1 UIImage * image [UIImage imageNamed:"1.jpg"]; 简单说一下这种方式的优缺点&#xff1a; 优点&#xff1a;代码量少&#xff0c;一行代码就可以搞定。当程序中多次加载这张图片时&#xff0c;系统会指向同一块内存&#xff0c;…

(一二四)tableView的多组数据展示和手动排序

最近在写一个轻量级的网络游戏&#xff0c;遇到了技能优先顺序手动排序的需求&#xff0c;我就想到了iOS自带的tableView编辑功能&#xff0c;对其进行了初步探索&#xff0c;最后做出的效果如下图所示&#xff1a; 点击左边可以删除&#xff0c;拖住右边可以手动排序&#xff…

ARC_xp_20160530

1、 申请内存的地方在哪里&#xff1f;忘了...(应该是用的 malloc) 2、 键盘上按下一个键&#xff0c;处理的函数为&#xff1a;(所在的模块 应该是“CEGUIIrrlichtRenderer.dll”) 003B465F CC INT3 003B4660 /$ 53 PUSH EBX 003B4661 |. 56 …

Hibernate映射集合性能问题

首先&#xff0c;这篇文章的灵感来自于Burt Beckwith在2011年1月27日于SpringOne 2GX上发表的有关高级GORM –性能&#xff0c;定制和监控的演讲 。 简而言之&#xff0c; Burt Beckwith讨论了使用映射集合和GORM中的Hibernate 2级缓存的潜在性能问题&#xff0c;以及避免此类性…

算法:1!+(1!+3!)+(1!+3!+5!) + ( 1! + 3! + 5! + 7! + 9!)+....+(1!+3!+5!+ ... + m!)...

-(void)touchesBegan:(nonnull NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event{ //算法入口 [self func2:9]; } //计算阶乘 factor&#xff08;m&#xff09;&#xff1d; m&#xff01; -(int)factor:(int)m{ int factorNum0; if(m0|m1) return 1; e…

知道这 20 个正则表达式,能让你少写 1,000 行代码

CocoaChina05-13正则表达式&#xff0c;一个十分古老而又强大的文本处理工具&#xff0c;仅仅用一段非常简短的表达式语句&#xff0c;便能够快速实现一个非常复杂的业务逻辑。熟练地掌握正则表达式的话&#xff0c;能够使你的开发效率得到极大的提升。下面是技匠整理的&#x…

用Jackson进行Java JSON处理

JSON &#xff08;Javascript对象符号&#xff09;正成为一种非常流行的数据交换格式。 在使用诸如YUI&#xff0c;ExtJS&#xff0c;DOJO等Javascript框架开发Web应用程序时&#xff0c;我们可以使用XML或JSON在客户端和服务器之间交换数据。 通常&#xff0c;我们从服务器获得…