Also im Grunde bin ich sehr neu im Multithreading. Ich möchte 5 Aufgaben in verschiedenen Intervallen planen. So erfuhr ich über die Executer-Dienste, die Planung bieten.Können wir mehrere geplante Thread-Pools in Java haben?
Starten von fünf Aufgaben in unterschiedlichen Intervallen. Ich bin mir nicht sicher, kann getan werden.
Und möglicherweise ist es möglich, dass eine oder mehrere Aufgaben gleichzeitig gestartet werden. Also dachte ich über das Erstellen mehrerer Thread-Pools für alle Aufgaben. Werden sie noch kollidieren? und welches Leistungsproblem könnte ich haben, wenn ich mehrere Thread-Pools beginne Bitte leite dies auch ..!
Also bitte helfen!
public class NewScheduler {
public static final Logger logger = Logger.getLogger(NewScheduler.class.getName());
static ScheduledExecutorService scheduledExecutorService;
List<ExecuterSchedulerBean> list = new ArrayList<>();
FanMonitorDao fanMonitorDao;
public static void proceed(){
logger.info("NewScheduler || proceed || :-START");
List<Runnable> runnableList = new ArrayList<>();
NewScheduler scheduler = new NewScheduler();
runnableList.add(new ActiveLinkChecker());
runnableList.add(new SecondScheduler());
runnableList.add(new ThirdScheduler());
runnableList.add(new FourthScheduler());
runnableList.add(new FifthScheduler());
for(Runnable check : runnableList){
try {
scheduledExecutorService = Executors.newScheduledThreadPool(1);
if(check instanceof ActiveLinkChecker){
scheduler.schedulerTasks("linkChecker", check);
ExecuterSchedulerBean bean = new ExecuterSchedulerBean();
bean.setServiceName("linkChecker");
bean.setScheduledExecutorService(scheduledExecutorService);
}else if(check instanceof SecondScheduler){
scheduler.schedulerTasks("secondChecker", check);
ExecuterSchedulerBean bean = new ExecuterSchedulerBean();
bean.setServiceName("secondChecker");
bean.setScheduledExecutorService(scheduledExecutorService);
}else if(check instanceof ThirdScheduler){
scheduler.schedulerTasks("thirdChecker", check);
ExecuterSchedulerBean bean = new ExecuterSchedulerBean();
bean.setServiceName("thirdChecker");
bean.setScheduledExecutorService(scheduledExecutorService);
}else if(check instanceof FourthScheduler){
scheduler.schedulerTasks("fourthChecker", check);
ExecuterSchedulerBean bean = new ExecuterSchedulerBean();
bean.setServiceName("fourthChecker");
bean.setScheduledExecutorService(scheduledExecutorService);
}else if(check instanceof FifthScheduler){
scheduler.schedulerTasks("fifthChecker", check);
ExecuterSchedulerBean bean = new ExecuterSchedulerBean();
bean.setServiceName("fifthChecker");
bean.setScheduledExecutorService(scheduledExecutorService);
}
} catch (SocketException e) {
logger.info("Error in SchedularTaskServlet in Scheduling batches :-" + e);
try {
scheduledExecutorService = Executors.newScheduledThreadPool(1);
if(check instanceof ActiveLinkChecker){
scheduler.schedulerTasks("linkChecker", check);
ExecuterSchedulerBean bean = new ExecuterSchedulerBean();
bean.setServiceName("linkChecker");
bean.setScheduledExecutorService(scheduledExecutorService);
}else if(check instanceof SecondScheduler){
scheduler.schedulerTasks("secondChecker", check);
ExecuterSchedulerBean bean = new ExecuterSchedulerBean();
bean.setServiceName("secondChecker");
bean.setScheduledExecutorService(scheduledExecutorService);
}else if(check instanceof ThirdScheduler){
scheduler.schedulerTasks("thirdChecker", check);
ExecuterSchedulerBean bean = new ExecuterSchedulerBean();
bean.setServiceName("thirdChecker");
bean.setScheduledExecutorService(scheduledExecutorService);
}else if(check instanceof FourthScheduler){
scheduler.schedulerTasks("fourthChecker", check);
ExecuterSchedulerBean bean = new ExecuterSchedulerBean();
bean.setServiceName("fourthChecker");
bean.setScheduledExecutorService(scheduledExecutorService);
}else if(check instanceof FifthScheduler){
scheduler.schedulerTasks("fifthChecker", check);
ExecuterSchedulerBean bean = new ExecuterSchedulerBean();
bean.setServiceName("fifthChecker");
bean.setScheduledExecutorService(scheduledExecutorService);
}
} catch (Exception ex) {
logger.info("Error in SchedularTaskServlet in Scheduling batches :-" + ex, new Throwable());
e.printStackTrace();
}
e.printStackTrace();
} catch (SQLException e) {
logger.info("Error in SchedularTaskServlet in Scheduling batches :-" + e);
try {
scheduledExecutorService = Executors.newScheduledThreadPool(1);
if(check instanceof ActiveLinkChecker){
scheduler.schedulerTasks("linkChecker", check);
ExecuterSchedulerBean bean = new ExecuterSchedulerBean();
bean.setServiceName("linkChecker");
bean.setScheduledExecutorService(scheduledExecutorService);
}else if(check instanceof SecondScheduler){
scheduler.schedulerTasks("secondChecker", check);
ExecuterSchedulerBean bean = new ExecuterSchedulerBean();
bean.setServiceName("secondChecker");
bean.setScheduledExecutorService(scheduledExecutorService);
}else if(check instanceof ThirdScheduler){
scheduler.schedulerTasks("thirdChecker", check);
ExecuterSchedulerBean bean = new ExecuterSchedulerBean();
bean.setServiceName("thirdChecker");
bean.setScheduledExecutorService(scheduledExecutorService);
}else if(check instanceof FourthScheduler){
scheduler.schedulerTasks("fourthChecker", check);
ExecuterSchedulerBean bean = new ExecuterSchedulerBean();
bean.setServiceName("fourthChecker");
bean.setScheduledExecutorService(scheduledExecutorService);
}else if(check instanceof FifthScheduler){
scheduler.schedulerTasks("fifthChecker", check);
ExecuterSchedulerBean bean = new ExecuterSchedulerBean();
bean.setServiceName("fifthChecker");
bean.setScheduledExecutorService(scheduledExecutorService);
}
} catch (Exception ex) {
logger.info("Error in SchedularTaskServlet in Scheduling batches :-" + ex, new Throwable());
e.printStackTrace();
}
e.printStackTrace();
} catch (Exception e) {
logger.info("Error in SchedularTaskServlet in Scheduling batches :-" + e, new Throwable());
e.printStackTrace();
}
}
logger.info("NewScheduler || proceed || :-END");
}
private void schedulerTasks(String taskName, Runnable scheduler) throws SQLException, SocketException {
logger.debug("NewScheduler || schedulerTasks || :-START");
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy kk:mm");
Calendar cal = null;
int weekDay = 0, weekMin = 0, weekHr = 0, runDay = 0, runHr = 0, runMin = 0, runDelay = 0;
float runGap = 0;
String flag = null;
fanMonitorDao = new FanMonitorDaoImpl();
try {
SchedulerBean bean = fanMonitorDao.getScheduler(taskName);
flag = (("A").equalsIgnoreCase(bean.getSchedulerStatus())?"Y":"N").trim();
if (flag != null && flag.equalsIgnoreCase("Y")) {
cal = Calendar.getInstance();
weekDay = cal.get(Calendar.DAY_OF_WEEK);// get the Weekday , from 1 to 7
weekHr = cal.get(Calendar.HOUR_OF_DAY);// get the Weekday , from 0 to 23
weekMin = cal.get(Calendar.MINUTE);// get the Weekday , from 0 to 59
System.out.println("Current Week Day is :->" + weekDay + ", Week Hrs:->" + weekHr + ", Week Min:->" + weekMin);
runDay = (runDay=Integer.parseInt(bean.getSchedulerDay().trim())) == 0 ? weekDay : runDay;
runHr = (runHr=Integer.parseInt(bean.getSchedulerHrs().trim()))== 0 ? weekHr : runHr;
runMin = Integer.parseInt(bean.getSchedulerMin().trim());
runGap = Float.parseFloat(bean.getSchedulerGap().trim());
runDelay = Integer.parseInt(bean.getSchedulerDelay().trim());
runDay = (runDay >= weekDay) ? (runDay - weekDay) : runDay + (7 - weekDay);
runHr = (runHr >= weekHr) ? (runHr - weekHr) : runHr + (24 - weekHr);
runMin = (runMin >= weekMin) ? (runMin - weekMin) : runMin - weekMin;
System.out.println("Difference between current values and Property values are :-days:->" + runDay + " Hrs:->" + runHr + " Min:->" + runMin);
cal.setTime(sdf.parse(sdf.format(new Date())));
cal.add(Calendar.DATE, runDay);
cal.add(Calendar.HOUR, runHr);
cal.add(Calendar.MINUTE, runMin);
runDay = Integer.parseInt(String.valueOf((cal.getTimeInMillis() - (sdf.parse(sdf.format(new Date()))).getTime())));
System.out.println("Next First run time is :->" + runDay + "-->>" + runDelay * runGap * 60 * 60 * 1000);
@SuppressWarnings("unused")
ScheduledFuture<?> alarmFuture = scheduledExecutorService.scheduleWithFixedDelay(scheduler, (long) runDay, (long) ((long) runDelay * runGap * 60 * 60 * 1000), TimeUnit.MILLISECONDS);
}
} catch (Exception e) {
logger.info("Error in SchedularTaskServlet in Scheduling batches :-" + e, new Throwable());
e.printStackTrace();
}
logger.debug("NewScheduler || schedulerTasks || :-END");
}
}
Diese Frage sollte hilfreich sein http://stackoverflow.com/questions/20387881/how-to-run-certain-task-every-day-at-a-particular-time-using-scheduledexecutorse – praveen
Tushar versuchen, die aktualisieren Frage mit Code, den Sie auch versucht haben .. – praveen
k..geben Sie mir eine Minute..der Code ist nicht vollständig, aber sollte ausreichen, um die Situation zu verstehen.! –