如何在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>