如何在Web应用程序中调用Java线程
我需要创建一个线程,每天检查我是否必须为这个用户创建任务。我知道使用如何在Web应用程序中调用Java线程,java,multithreading,Java,Multithreading,我需要创建一个线程,每天检查我是否必须为这个用户创建任务。我知道使用main()创建和运行java线程。但是如何在web应用程序中运行它。说真的,我搜索了很多,并没有得到任何关于在web应用程序中运行的答案。关于这一点,我没有什么问题 1我的线程最初如何启动以及从哪里运行 2我需要在任何XML文件中定义我的线程吗 这是我的线 public class TaskGenerationThread implements Runnable { @Override public void run(){
main()
创建和运行java线程。但是如何在web应用程序中运行它。说真的,我搜索了很多,并没有得到任何关于在web应用程序中运行的答案。关于这一点,我没有什么问题
1我的线程最初如何启动
以及从哪里运行
2我需要在任何XML文件中定义我的线程吗
这是我的线
public class TaskGenerationThread implements Runnable {
@Override
public void run(){
System.out.println("callled at "+ new Date());
/*try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}*/
/*List<Users> listOfCA = complianceUserService.getAllCA();
if(listOfCA !=null && !listOfCA.isEmpty()){
Users ca = complianceUserService.fetchUserByUserId(1).get(0);
Date currentDate = new Date();
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MONTH, 1);
calendar.set(Calendar.DATE, calendar.getActualMinimum(Calendar.DAY_OF_MONTH)); //getting first day of month
Date nextMonthFirstDay = calendar.getTime();
calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DAY_OF_MONTH)); //getting last day of month
Date nextMonthLastDay = calendar.getTime();
taskGeneratorService.generateCronJobTaskForCompanyCompliance(nextMonthFirstDay,nextMonthLastDay,ca);
}*/
}
我们将非常感谢您的帮助。谢谢写一个
implements ServletContextListener
凌驾
public void contextInitialized(ServletContextEvent sce)
从这里启动一些调度程序
e、 g
注意这适用于Tomcat
您的contextdestromed
应该是
@Override
public void contextDestroyed(ServletContextEvent sce) {
log.info("Scheduler entered contextDestroyed");
if (listChecker != null) {
listChecker.shutdownNow();
log.info("waiting [60 seconds] for collector threads to finsih");
try {
listChecker.awaitTermination(60, TimeUnit.SECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
log.info("Scheduler finished contextDestroyed");
}
当然,您需要将其添加到web.xml中
<listener>
<listener-class>
myPackage.Scheduler
</listener-class>
</listener>
myPackage.Scheduler
在上面的示例中,我只是使用了一个java.util.concurrent.ScheduledExecutorService
并传入了一个Runnable
类文件checker您不应该真正扩展Thread
,而应该将实现Runnable
更改为Runnable。但还没有开始工作。我错过什么了吗(类似这样的东西com.uforic.compliance.spring.task.Scheduler
@Override
public void contextDestroyed(ServletContextEvent sce) {
log.info("Scheduler entered contextDestroyed");
if (listChecker != null) {
listChecker.shutdownNow();
log.info("waiting [60 seconds] for collector threads to finsih");
try {
listChecker.awaitTermination(60, TimeUnit.SECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
log.info("Scheduler finished contextDestroyed");
}
<listener>
<listener-class>
myPackage.Scheduler
</listener-class>
</listener>