Tag: 调度

在Java中实现循环调度算法

经过数小时的脑筋训练后,我终于崩溃了,结果我不知道如何在java中实现循环法。 我尝试了不同的方法,而且我得到的最接近……我用一个例子来解释.. AT =到达时间BT =突发时间(执行时间) 首先,我有这一行数字(0,5;6,9;6,5;15,10) ,其中位置0-2-4元素表示到达时间,位置1-3-5元素表示突发时间。 我的代码到目前为止,这个输入变成了一个类,名为Process,它带有一个构造函数: Process(String name, int AT, int BT) 。 我在ArrayList分离了进程。 所以现在我有一个ArrayList alst = [P0,P1,P2,P3] where P0 has AT 0 and BT 5 and so on 。 我创建了一个方法,它将返回一个已经被削减了一段时间的进程列表 – 例如在(0,5;6,9;6,5;15,10)情况下,我将得到一个结果: [P0,P0,P1,P1,P1,P2,P2,P3,P3,P3,P3] 因此循环方法是一种方法,其中每个进程都获得了我选择的量子执行时间3。 带有AT 0和BT 3的P0进入 – 添加到最终列表(时间过去= 3) 带有AT 0和BT 2的P0进入 – 添加到最终列表(时间过去= 5) P0完了 带有AT 6和BT 3的P1进入 – 添加到最终列表(时间过去= […]

调度设计模式?

假设我在Java中有一个类层次结构: interface Item { … }; class MusicBox implements Item { … }; class TypeWriter implements Item { … }; class SoccerBall implements Item { … }; 我在同一个包中有另一个类: class SpecialItemProcessor { public void add(Item item) { /* X */ } } 我想为每个项目类型做一些不同的事情,但我不想在不同的Item类( MusicBox , TypeWriter , SoccerBall )中定义该动作。 解决这个问题的一种方法是: class SpecialItemProcessor { public void add(Item […]

Java预定执行程序的准确性

我在使用Java预定执行程序时遇到了一个特殊问题,并且想知道我所经历的是否正常。 我需要安排以5秒的预定义速率执行的任务。 预计这些任务将不时需要超过5秒的时间执行,但是当运行它们的时间低于5秒时,备份的任务列表应该快速连续运行以赶上。 在运行任务时,重要的是要知道原始计划执行时间是什么(想想java.util.TimerTask scheduledExecutionTime() )。 最后,我需要跟踪预定时间和实际时间之间的差异,以确定时间表“漂移”的时间和数量。 到目前为止,我已经使用Java执行器实现了所有这些,下面的类说明了一般的想法: public class ExecutorTest { public static final long PERIOD = 5000; public static void main(String[] args) { Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate( new Command(), 0, PERIOD, TimeUnit.MILLISECONDS); } private static final class Command implements Runnable { long timestamp = 0; public void run() { long now = System.currentTimeMillis(); if (timestamp == […]

使用invokedynamic实现多个分派

我想知道Java7的新invokedynamic字节码指令是否可用于实现Java语言的多个调度 。 java.lang.invoke下的新API是否有助于执行此类操作? 我考虑的场景如下所示。 (这看起来像访问者设计模式的应用案例,但可能有理由认为这不是一个可行的选择。) class A {} class A1 extends A {} class A2 extends A {} class SomeHandler { private void doHandle(A1 a1) { … } private void doHandle(A2 a2) { … } private void doHandle(A a) { … } public void handle(A a) { MultipleDispatch.call(this, “doHandle”, a); } } 那么库类MultipleDispatch会做类似的事情: class MultipleDispatch […]

如何在Tomcat中安排任务

我在Tomcat中部署了一个Web应用程序。 我有一组代码,用于检查数据库中的某些数据,然后根据该数据向用户发送邮件。 有人可以建议如何在Tomcat中安排这个。

使用遗传算法的高中时间表

我正在将java中的高中时间表遗传算法作为一个项目,但我有几个问题,我可以在哪个方向处理这个问题。 我的染色体编码应该是什么? 包含每个值或可能是字符串的ArrayList? 我该如何输入和输出数据? 我应该将数据保存在Excel中并输出时间表作为GUI吗? 新手程序员在实现算法时应该记住哪些基本知识? 到目前为止,我与GA的经验是创建一个解决旅行销售人员问题并将随机字符串演变为“Hello World”的人,但我担心我对数据库和高级概念缺乏知识会使我陷入困境完成这个项目。

安排将来用Java或Python发送电子邮件的时间

我正在编写一个应用程序,我希望以某种方式安排一封电子邮件在以后发送(可能在运行一小时后)。 编程语言将是Python或Java。 任何可用于此目的的开源工具? 编辑:我忘了提到它是在测试运行后运行,所以应用程序已经关闭,我相信Quartz解决方案不起作用。 这可能吗? 理想情况下,我想听听SMTP协议有一些隐藏的东西允许这样做,并且只需要在消息中添加一些标记,电子邮件提供商会解释为​​必须稍后发送它们。

如何将参数传递给Timertask Run方法

我有一个方法,我希望它可以安排在以后执行。 调度时间和方法的参数取决于用户输入。 我已经尝试过Timers,但我有一个问题。 怎么可能将参数传递给Java TimerTask运行方法? TimerTask timert = new TimerTask() { @Override public void run() { //do something } }

Java Generic / Type Dispatch Question

考虑以下程序: import java.util.List; import java.util.ArrayList; public class TypeTest { public static class TypeTestA extends TypeTest { } public static class TypeTestB extends TypeTest { } public static final class Printer { public void print(TypeTest t) { System.out.println(“T”); } public void print(TypeTestA t) { System.out.println(“A”); } public void print(TypeTestB t) { System.out.println(“B”); } public void print(List […]

Quartz Thread Execution并行还是顺序?

我们有一个基于石英的调度程序应用程序,每分钟运行大约1000个作业,这些作业在每分钟的几秒钟内均匀分布,即每秒大约16-17个作业。 理想情况下,这些16-17个作业应该同时触发,但是我们的第一个语句(简单地记录执行时间)的作业执行方法被称为很晚。 例如,假设我们从05:00到05:04每分钟安排1000个工作。 因此,理想情况下,计划在05:03:50的作业应该在05:03:50记录执行方法的第一个语句,但是,它是在大约05:06:38进行的。 我已经跟踪了预定作业所花费的时间,大约需要15-20毫秒。 这个预定的作业足够快,因为我们只是在ActiveMQ队列上发送消息。 我们已经指定石英的线程数为100,甚至尝试将其增加到200或更多,但没有增益。 我们注意到的另一件事是来自调度程序的日志在前1分钟后即将连续发生 [Quartz_Worker_28] .. .. [Quartz_Worker_29] .. .. [Quartz_Worker_30] .. .. 因此它表明,经过一段时间石英运行线程几乎是顺序的。 可能是由于将作业完成通知持久性存储(在这种情况下是一个单独的postgres数据库)和/或上下文切换所花费的时间。 这种奇怪行为背后的原因是什么? 编辑:更详细的日志 [06/07/12 10:08:37:192][QuartzScheduler_Worker-34][INFO] org.quartz.plugins.history.LoggingTriggerHistoryPlugin – Trigger [] fired job [] scheduled at: 06-07-2012 10:08:33.458, next scheduled at: 06-07-2012 10:34:53.000 [06/07/12 10:08:37:192][QuartzScheduler_Worker-34][INFO] .scheduler.quartz.ScheduledLocateJob – execute begin——— ScheduledLocateJob with key: started at Fri Jul 06 10:08:37 EDT […]