首页 > 解决方案 > Java:线程编程,线程睡眠

问题描述

我有一个主线程,它有自己的子线程。每个线程都有一个要执行的进程,并且该特定线程在其工作完成后必须休眠,直到下一次线程唤醒频率。

我已经实现了整个代码部分,但无法让线程休眠,因为我不知道该线程的工作是否完成,以便让它休眠到下一个频率时间。

  1. 创建主线程
  2. 为数据库中的每个进程创建子线程。
  3. 对于每个子线程进程,它会检查其运行时和下一个运行时以执行作业。
  4. 工作完成后让线程休眠,直到下一次运行时。
  5. 转到步骤 3。

我被困在 4 点,检查线程是否完成了它的工作。(这里子线程没有说,如果它的工作完成与否,我们让它在工作完成后让它休眠)

谁能帮忙,怎么办?

private static ScheduledExecutorService stp = Executors.newScheduledThreadPool(11);

@Scheduled(fixedDelayString = "${con.fixedDelay}")
public void processServices() {

    try {

        logger.debug("Entering processServices in MasterProcessThread ");

        // Getting process details and schedule
        List<ProcessDomain> activeProcessList = processDomainDao.getActiveProcessDomainSchedule();

        logger.info("getDomainData for flag is Active :: " + activeProcessList.size());

        // Iterating over active processList to create child threads
        for (ProcessDomain activeProcessDomain : activeProcessList) {

            Timestamp nextRunTS = activeProcessDomain.getProcessSchedule().getProcessNextRunScheduleTime();

            Long nextRunTime = (nextRunTS != null ? nextRunTS.getTime() : null);
            Long startTS = activeProcessDomain.getProcessSchedule().getProcessScheduleTime().getTime();
            Long currentTS = System.currentTimeMillis();
            boolean isPreviousRunSucc = (activeProcessDomain.getProcessRunHistory().getPreviousSuccFlag() != null
                    && activeProcessDomain.getProcessRunHistory().getPreviousSuccFlag().equals("Y")) ? true : false;
            Future future = null;

            // Initializing the child threads and start processing
            if (((nextRunTime == null && currentTS >= startTS) || (nextRunTime != null && currentTS >= nextRunTime))
                    && isPreviousRunSucc) {
                Callable task = beanServiceThreadFactory.getBeanThread(activeProcessDomain.getProcessName(),
                        activeProcessDomain);
                future = stp.submit(task);
                if (future.isDone()){
                    stp.shutdown();
                }
            }
        }

标签: javamultithreading

解决方案


推荐阅读