任务调度Java代码实现,java 线程调度

Java Web应用中如何实现任务有效调度

任务调度是大型J2EEweb应用中常见的工作。开发者希望以指定的间隔时间执行各类操作,并完成一些无需用户输入的任务。java中可有无数方法来做到这一点,但是在web应用中却并没有这方面的统一标准。当许多开发人员参与同一个项目,并且以各自不同的方式来实现任务调度时,就可能产生很大问题。内存和同步问题就是必须首先考虑的两件事。事实上,一些开发者试图调用操作系统层面的任务调度机制,如Unix平台上的cron。这种编程实践也许并不是太坏,但它将直接导致可移植性被抛到九霄云外。

创新互联建站专注于企业网络营销推广、网站重做改版、青原网站定制设计、自适应品牌网站建设、html5商城网站定制开发、集团公司官网建设、成都外贸网站制作、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为青原等各大城市提供网站开发制作服务。

java 定时任务的几种实现方式

JDK 自带的定时器实现

// schedule(TimerTask task, long delay) 延迟 delay 毫秒 执行

// schedule(TimerTask task, Date time) 特定时间执行

public static void main(String[] args) {

for (int i = 0; i 10; ++i) {

new Timer("timer - " + i).schedule(new TimerTask() {

@Override

public void run() {

println(Thread.currentThread().getName() + " run ");

}

}, 1000);

}

}

2. Quartz 定时器实现

//首先我们需要定义一个任务类,比如为MyJob02 ,

//该类需要继承Job类,然后添加execute(JobExecutionContext context)方法,在

//这个方法中就是我们具体的任务执行的地方。

//由希望由调度程序执行的组件实现的接口

public class MyJob02 implements Job {

@Override

public void execute(JobExecutionContext context) throws JobExecutionException {

// TODO Auto-generated method stub

// 执行响应的任务.

System.out.println("HelloJob.execute,"+new Date());

}

}

public class QuartzTest5 {

public static void main(String[] args) throws Exception {

//SchedulerFactory 是一个接口,用于Scheduler的创建和管理

SchedulerFactory factory = new StdSchedulerFactory();

//从工厂里面拿到一个scheduler实例

//计划表(可能翻译的不太贴切),现在我们有了要做的内容,

//与调度程序交互的主要API

/*

* Scheduler的生命期,从SchedulerFactory创建它时开始,

到Scheduler调用shutdown()方法时结束;Scheduler被创建后,

可以增加、删除和列举Job和Trigger,以及执行其它与调度相关的操作

(如暂停Trigger)。但是,Scheduler只有在调用start()方法后,

才会真正地触发trigger(即执行job)

*/

Scheduler scheduler = factory.getScheduler();

//具体任务.

//用于定义作业的实例

//JobBuilder - 用于定义/构建JobDetail实例,用于定义作业的实例。

JobDetail job = JobBuilder.newJob(MyJob.class).withIdentity("job1", "group1").build();

//Trigger(即触发器) - 定义执行给定作业的计划的组件

//TriggerBuilder - 用于定义/构建触发器实例

CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1")

.withSchedule(CronScheduleBuilder.cronSchedule("0/1  * * * * ?")).build();

scheduler.scheduleJob(job, trigger);

scheduler.start();

}

3. Spring  boot 任务调度(这个非常容易实现)

/*

*  开启对定时任务的支持

*  在相应的方法上添加@Scheduled声明需要执行的定时任务。

*/

@EnableScheduling

//@EnableScheduling注解来开启对计划任务的支持

public class Application {

public static void main(String[] args) {

SpringApplication.run(Application.class, args);

}

}

@Component

public class ScheduledTasks {

private Logger logger = LoggerFactory.getLogger(ScheduledTasks.class);

private    int     i=0;

//0 0 0 2 * ?

@Scheduled(cron="*  *  *  2  *  ?")

//@Scheduled 注解用于标注这个方法是一个定时任务的方法

public void testFixDelay() {

logger.info("执行方法"+i++);

}

用c语言或者Java设计出一个任务调度器。。。

公众:类PrivilegeProcess {

公共静态无效的主要(字串[] args){

MyQueue的MyQueue的新MyQueue的();/ /声明队列

印刷电路板[PCB = {新的PCB(001 ,8,1),新的PCB(002,7,9),新的PCB(003,3,8),新的PCB(004,1,7),新的PCB(005,7,4)};

PCB段=新的PCB();

(INT I = 0; pcb.length; + +){/ /初始化先进行排序,选择排序这里使用的是高优先级的一线队

(J =我; pcb.length; J + +){

(PCB [I]。特权PCB [J]。特权){

段= PCB [1];

PCB [I] = PCB [J];

PCB [J] =段;

}

}

}

体系。通过out.println(“入队后第一时间的进程的顺序:”);

(INT I = 0; pcb.length; + +){

的System.out调用println(第一次入队#程序名称:“+ PCB [我]。名称+ totaltime:”+ PCB [I]。totaltime +“的”特权“+ PCB [我]。特权); }

();

myqueue.start(PCB);

}

}

类MyQueue的{

INT指数= 0;

PCB [] PC =新的PCB [5];

PCB [] PC1 =新的PCB [4];

PCB温度=新的PCB() BR /公共无效排队(PCB工艺){/ /排队算法

(指数== 5){

(“出界!”);

返回

}

PC [索引] =进程;

指数+ +;

}

公共:PCB DEQUEUE(){/ /出队算法(索引== 0)

返回空;

(INT I = 0; pc1.length; + +){

PC1 [I] = PC [ +1];

}

指数 -

温度= PC [0];

(INT I = 0; pc1.length; + +){ BR / PC [I] = PC1 [I];

}

回报条件;

}

公共无效启动(PCB [] PC){/ /进程表算法

(PC [0]。isNotFinish ==真| | PC [1 isNotFinish ==真| | PC [2 isNotFinish ==真| | PC [3]。时isNotFinish ==真| | PC [4]。isNotFinish ==){

/ / *注:| |运算符都是假的,所有的表达式结果为假,否则真

(INT I = 0; PC长度; + +){

PC [I]。运行(这一点); /} 的System.out.println();

(INT I = 0; pc.length; + +){/ /处理每个运行一次运行的时间片的长度重新排序优先一旦

(J =我; pc.length; J + +){

如果(PC [I]特权PC [J]。特权){

温度= PC [I];

PC [I] = PC [J];

PC [J] =温度;

}

}

}

}

}

}

类PCB {/ /声明过程级

和int名,totaltime ,运行时特权;

布尔isNotFinish的;

公众PCB(){

}

公开PCB(名称,诠释totaltime特权){

this.name =的名称;/ /进程名

this.totaltime = totaltime ;/ /

this.privilege =特权;/ /总时间优先 this.runtime = 2 ;/ /时间片值是2

this.isNotFinish =真;/ /是否执行完成

(“初始值:程序名称:”+名+“totaltime:”+ totaltime +“特权”+特权);

System.out的。调用println();

}

MyQueue的MQ公共无效的run(){/ /处理的基础上实施的时间片算法

(totalTime 1){ totaltime =运行;/ /总时间大于1,总时间=总时间 - 时间片

特权 -

(“程序名称:”+姓名+“ remaintime:“+ +”特权“+特权); totaltime

的} else if(totaltime == 1){

totaltime - ;/ /总时间为1时,执行时间为1

特权 -

(“程序名称:”+姓名+“remaintime:”+ totaltime +“特权”+特权);

}其他{

isNotFinish =假;/ / 0,将isNotFinish标志设置为假

}

如果(isNotFinish ==真){br mq.deQueue(); mq.enQueue(本); }

}

}

java里thread怎么实现定时调度

java Thread类实现定时调度,可以延迟几秒之后再执行,代码如下:

public class ceshi {

public static void main(String[] args) throws Exception {

// run in a second

final long timeInterval = 1000;

Runnable runnable = new Runnable() {

@Override

public void run() {

while (true) {

// ------- code for task to run

System.out.println("Hello !!");

// ------- ends here

try {

Thread.sleep(timeInterval);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

};

Thread thread = new Thread(runnable);//线程创建

thread.start();//线程启动

}

}

运行结果:


网站栏目:任务调度Java代码实现,java 线程调度
URL链接:http://scjbc.cn/article/hscdgo.html

其他资讯