Resume las tres formas de lograr los códigos de programación y ejemplos de tareas - subprocesos múltiples: el aprendizaje de Java

java programación de tareas se puede lograr de varias maneras Resumen

medios de programación basado en el punto dado en el tiempo , un intervalo de tiempo dado o una frecuencia dada y realizar tareas automatizadas.

(1) Timmer

Uso del temporizador clases principales de programación de tareas se dan cuenta son temporizador y TimerTask. Temporizador, que se encarga de establecer la hora de inicio y los intervalos de TimerTask. Los usuarios sólo tienen que crear una clase para heredar TimerTask lograr su método run, y luego tiró temporizador para llevar a cabo a.

Temporizador ventaja de ser fácil de usar, sino porque todas las tareas son la programación por el mismo hilo, por lo que todas las tareas se realizan en serie, al mismo tiempo, sólo una tarea en ejecución, una tarea en la parte delantera de demora ni excepción voluntad después de la tarea se verá afectado.

El siguiente es un simple ejemplo de clase Timmer:

public class test {

	public static void main(String[] args) {
		final SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

		Timer timer = new Timer();
		// 从当前时间之后10秒开始执行,每2秒执行一次
		timer.schedule(new TimerTask() {
			@Override
			public void run() {
				String timeString=df.format(new Date());
				System.out.println("   "+timeString+  "  so easy......");
			}
		}, new Date(System.currentTimeMillis() + 10000), 2000);
	}
}

Los resultados:
Aquí Insertar imagen Descripción

(2) ScheduledExecutor

ScheduledExecutor está diseñado basado en el grupo de subprocesos.

La filosofía de diseño es que cada tarea será programada para ser ejecutado por un hilo grupo de subprocesos, por lo que la tarea se ejecuta concurrentemente, sin interferencia entre sí. Tenga en cuenta que, sólo cuando el tiempo de ejecución de la tarea de la llegada, ScheduedExecutor realmente va a iniciar un hilo, el resto son ScheduledExecutor tarea de sondeo de estado.

public class test {
	public static void main(String[] args) {
		ScheduledExecutorService service = Executors.newScheduledThreadPool(10);
		/**
		 * 任务1
		 */
		long initialDelay1 = 6;
		long period1 = 2;
		// 从现在开始6秒钟之后,每隔2秒钟执行一次job1
		service.scheduleAtFixedRate(new MyRunnable("我的定时任务111啊"), initialDelay1,
				period1, TimeUnit.SECONDS);
		/**
		 * 任务2
		 */
		long initialDelay2 = 2;
		long period2 = 1;
		// 从现在开始6秒钟之后,每隔2秒钟执行一次job1
		service.scheduleAtFixedRate(new MyRunnable("我的定时任务222啊"), initialDelay2,
				period2, TimeUnit.SECONDS);	
	}
}
class MyRunnable implements Runnable {
	private String JobName;
	public MyRunnable() {
	}
	public MyRunnable(String JobName) {
		this.JobName = JobName;
	}
	@Override
	public void run() {
		System.out.println("正在执行----" + this.JobName);
	}
}

(3) de código abierto Toolkit cuarzo

Cuarzo elementos básicos:
Programador: Programador de tareas, las tareas son todos de aquí.
Disparador: disparador, definir el intervalo de ejecución de la tarea.
JobDetail y de empleo: definición lógica de tareas específicas a realizar.

Caso: no un minuto para llevar a cabo un total de dos trabajos. Los resultados mostrados en la figura:

Aquí Insertar imagen Descripción

Código principal:

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

		run();
	}

	public static void run() throws Exception {
		System.out.println("------- 初始化Scheduler ---------");

		StdSchedulerFactory sf = new StdSchedulerFactory();
		// quartz的schedulerFactory实现解析。SchedulerFactory是一个接口,用于Scheduler的创建和管理。
		Properties props = new Properties();
		props.put("org.quartz.scheduler.instanceName", "MyScheduler");// 调度器属性
		props.put("org.quartz.threadPool.threadCount", "2");// 线程配置,线程池的数量

		sf.initialize(props);// 初始化
		Scheduler sched = sf.getScheduler();

		System.out.println("------- 初始化Scheduler完成 --------");

		System.out.println("------- Jobs配置 ----------------");

		JobDetail job1 = newJob(MyJob1.class).withIdentity("myJob-1",
				"my-job-1").build();
		JobDetail job2 = newJob(MyJob2.class).withIdentity("myJob-2",
				"my-job-2").build();

		CronTrigger trigger1 = newTrigger()
				.withIdentity("triggerForMe1", "my-trigger1")
				.withSchedule(cronSchedule("0 0/1 * * * ?")).build();// 这是一个触发器,每隔1分钟触发一次

		CronTrigger trigger2 = newTrigger()
				.withIdentity("triggerForMe2", "my-trigger2")
				.withSchedule(cronSchedule("0 0/1 * * * ?")).build();

		job1.getJobDataMap().put("MyName", "小兔子");
		job2.getJobDataMap().put("MyName", "小猪猪");

		Date scheduleTime1 = sched.scheduleJob(job1, trigger1);// 触发器trigger1,触发job1。
		Date scheduleTime2 = sched.scheduleJob(job2, trigger2);

		System.out.println(job1.getKey() + " has been scheduled to run at: "
				+ scheduleTime1 + " and repeat based on expression: "
				+ trigger1.getCronExpression());
		System.out.println(job2.getKey() + " has been scheduled to run at: "
				+ scheduleTime2 + " and repeat based on expression: "
				+ trigger2.getCronExpression());

		System.out.println("------- 开启任务调度器------");

		sched.start();

		System.out.println("------- 任务调度器已经开启 ------");

	}

}

Dos de empleo:

public class MyJob1 implements Job{
	private String MyName;
	@Override
	public void execute(JobExecutionContext context) throws JobExecutionException {
		JobDataMap data = context.getJobDetail().getJobDataMap();
		MyName = data.getString("MyName");
		System.err.println( MyName+" 啊,你长得真好看!!!");
		
	}
	public String getMyName() {
		return MyName;
	}
	public void setMyName(String myName) {
		MyName = myName;
	}
	

}

public class MyJob2 implements Job{
	private String MyName;
	@Override
	public void execute(JobExecutionContext context) throws JobExecutionException {
		JobDataMap data = context.getJobDetail().getJobDataMap();
		MyName = data.getString("MyName");
		System.err.println( MyName+" 啊,你长得也好看!!!");
		
	}
	public String getMyName() {
		return MyName;
	}
	public void setMyName(String myName) {
		MyName = myName;
	}
	

}
Publicado 57 artículos originales · alabanza ganado 13 · vistas 1093

Supongo que te gusta

Origin blog.csdn.net/weixin_42924812/article/details/105256386
Recomendado
Clasificación