作者:adu | 来源:互联网 | 2023-09-25 20:35
请问一下有一个定时任务Task每3秒钟执行一次,在这个定时任务的for循环里创建A,每次开启一个线程将A丢进去,A继承Runnable接口,run方法运行10s<
请问一下有一个定时任务Task每3秒钟执行一次,在这个定时任务的for循环里创建A,每次开启一个线程将A丢进去,A继承Runnable接口,run方法运行10s
有两个问题
1.每次循环是不是taskExecutor.execute(t1);
执行完就会执行下一次for循环,和新开启线程内的run方法是否被执行结束没关系吧
2.for循环1000次执行完成后,但是run方法中的执行时间为10s是超过3s的没有执行完,定时任务到3s的时候还会继续执行吗,还是说等所有run方法结束后等3s才执行
public class Task {
private static Logger logger = LoggerFactory.getLogger(Task.class);
@Resource(name = "taskExecutor")
private TaskExecutor taskExecutor;
public void task() {
logger.info("==========开始执行定时任务==========");
for (int x = 0; x <1000; x++) {
try {
A a = new A(x);
Thread t1 = new Thread(a);
taskExecutor.execute(t1);
} catch (Exception e) {
}
}
}
public class A implements Runnable {
private int x;
public void run() {
System.out.println(this.x);
/* 逻辑处理执行时间10s */
}
public A(int x) {
this.x = x;
}
}
回答
说实话,你这题提的很迷糊,到底是for里面是定时任务,还是整个for是一个定时任务,看你声明就是乱的,A哪有task方法???
个人猜测你需要的答案,整个for是一个定时器任务。
1.从多线程的角度,不考虑定时器,没有任何关系。
2.这个看你用哪种框架,ScheduledExecutorService 就有关系,特别说明了不会同时执行一个任务,而quartz,就可以同时执行一个任务,你任务花多少时间他不管,只要线程池够用就行。但从cron表达式上来说,除了资源外,任务之间是不存在依赖关系的,同一个任务也是如此,ScheduledExecutorService 也没有说明是cron任务