Resume três maneiras de conseguir os programação e código exemplos de tarefas - Multithreading: aprendizagem java

java agendamento de tarefas pode ser alcançado de diversas maneiras resumo

meios de planeamento com base em dado momento , um determinado intervalo de tempo ou uma determinada frequência e executar tarefas automatizadas.

(1) Timmer

Use Temporizador classes principais de escalonamento de tarefas perceber são Temporizador e TimerTask. Temporizador, que é responsável por definir a hora de início e intervalos de TimerTask. Os usuários só precisam criar uma classe para herdar TimerTask alcançar o seu método de execução, e depois jogou temporizador para executar a.

Temporizador vantagem de ser simples de usar, mas porque todas as tarefas são agendamento pelo mesmo thread, então todas as tarefas são executadas em série, ao mesmo tempo apenas uma tarefa em execução, uma tarefa na frente de atraso ou exceção vontade depois que a tarefa será afetado.

O seguinte é um exemplo de classe Timmer simples:

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);
	}
}

Os resultados:
Aqui Insert Picture Descrição

(2) ScheduledExecutor

ScheduledExecutor é projetado com base no pool de threads.

A filosofia do projeto é que cada tarefa será agendada para ser executado por um thread do pool, então a tarefa é executada simultaneamente, sem interferências entre si. Note-se que, somente quando o tempo de execução da chegada tarefa, ScheduedExecutor irá realmente iniciar uma discussão, o resto são ScheduledExecutor tarefa polling 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) aberto de código Toolkit quartzo

Quartzo elementos centrais:
Scheduler: Agendador de tarefas, tarefas são todos daqui.
Trigger: gatilho, definir o intervalo de execução da tarefa.
JobDetail & Job: definição lógica de tarefas específicas a realizar.

Caso: não um minuto para executar um total de dois Job. Os resultados mostrados na Figura:

Aqui Insert Picture Descrição

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("------- 任务调度器已经开启 ------");

	}

}

Dois Job:

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 artigos originais · ganhou elogios 13 · vista 1093

Acho que você gosta

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