按固定时间间隔在Linux环境中运行java代码

主要分两步:一、在Linux环境中一直运行一个线程。二、如何控制java代码同时执行多个工作线程。

一、可以用Linux中的  nohup 命令,控制该线程就算在终端被关闭或者账户退出之后,继续在后台运行该线程,nohup 命令运行由Command参数和任何相关的Arg参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 & ( 表示“and”的符号)到命令的尾部。控制该线程在Linux环境中不会被挂起。

退出该线程的状态是Command参数指定命令的退出状态,即当所运行的java代码内容全部完成,线程全部退出时nohup结束。


二、对java代码中的线程池控制用Quartz框架对java中的Job进行控制。

一个Quartz的使用事例代码如下:

import java.util.Date;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.SimpleTrigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

import com.hefeng.quartz.quartzjob.QuartzJob;
import com.hefeng.quartz.quartzjob.QuartzJob1;

/**
 * 用Trigger调度任务
 * @author hefeng
 */
public class TriggerTest {

	public static void main(String[] args) throws SchedulerException, ClassNotFoundException {
		PropertyConfigurator.configure("E:/project/p2pProject/Bill_Account_Config/system/etc/log4jlog.properties");
		Logger log = Logger.getLogger(TriggerTest.class);
		SchedulerFactory schedulerFactory = new StdSchedulerFactory();
		//Schedule接口    实现调度器
		Scheduler scheduler = schedulerFactory.getScheduler();
		
//		Class<Job> claz = (Class<Job>)Class.forName("com.hefeng.quartz.quartzjob.QuartzJob");
		//用jobBuilder类实例化JobDetail接口      
		JobDetail jobDetail = JobBuilder.newJob(QuartzJob.class).withIdentity("quartzJob","quartzJob").build();
		
		JobDetail jobDetail1 = JobBuilder.newJob(QuartzJob1.class).withIdentity("quartzJob1","quartzJob").build();
		
		//Trigger为触发器
		log.info("aaaa");
		SimpleTrigger simpleTrigger = (SimpleTrigger) TriggerBuilder.newTrigger().withIdentity("simpleTrigger","simpleTrigger")
		.startAt(new Date())
		.withSchedule(
				SimpleScheduleBuilder.simpleSchedule()
				.withIntervalInSeconds(1).repeatForever()).build();
		
		SimpleTrigger simpleTrigger1 = (SimpleTrigger) TriggerBuilder.newTrigger().withIdentity("simpleTrigger1","simpleTrigger")
		.startAt(new Date())
		.withSchedule(
				SimpleScheduleBuilder.simpleSchedule()
				.withIntervalInSeconds(1).repeatForever()).build();
		
		scheduler.scheduleJob(jobDetail, simpleTrigger);
		
		scheduler.scheduleJob(jobDetail1, simpleTrigger1);
		
		scheduler.start();
		try {
			Thread.sleep(10000);   //主线程休眠,但是job调度作业继续运行
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		scheduler.shutdown();
	}

}
Quartz框架主要可分为调度器、作业、触发器等。

1、Quartz框架的核心是调度器。调度器负责管理Quartz应用运行时环境。调度器不是靠自己做所有的工作,而是依赖框架内一些非常重要的部件。Quartz不仅仅是线程和线程管理。为确保可伸缩性,Quartz采用了基于多线程的架构。启动时,框架初始化一套worker线程,这套线程被调度器用来执行预定的作业。这就是Quartz怎样能并发运行多个作业的原理。Quartz依赖一套松耦合的线程池管理部件来管理线程环境。

2、作业为实现Job接口的类,重写其中的 execute(JobExecutionContext context) 方法,方法体即为作业内容。

3、Trigger作为触发器,对作业进行实例化。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值