/** * Returns a list of all jobs known to the job manager that belong to the given * family and are in one of the provided states. */ private List select(Object family, int stateMask) { List members = new ArrayList(); synchronized (lock) { if ((stateMask & Job.RUNNING) != 0) { for (Iterator it = running.iterator(); it.hasNext();) { select(members, family, (InternalJob) it.next(), stateMask); } } if ((stateMask & Job.WAITING) != 0) select(members, family, waiting.peek(), stateMask); if ((stateMask & Job.SLEEPING) != 0) select(members, family, sleeping.peek(), stateMask); } return members; }
/** * Returns the estimated time in milliseconds before the next job is scheduled * to wake up. The result may be negative. Returns InternalJob.T_INFINITE if * there are no sleeping or waiting jobs. */ protected long sleepHint() { synchronized (lock) { //wait forever if job manager is suspended if (suspended) return InternalJob.T_INFINITE; if (!waiting.isEmpty()) return 0L; //return the anticipated time that the next sleeping job will wake InternalJob next = sleeping.peek(); if (next == null) return InternalJob.T_INFINITE; return next.getStartTime() - System.currentTimeMillis(); } }
/** * Returns a list of all jobs known to the job manager that belong to the given * family and are in one of the provided states. */ private List select(Object family, int stateMask) { List members = new ArrayList(); synchronized (lock) { if ((stateMask & Job.RUNNING) != 0) { for (Iterator it = running.iterator(); it.hasNext();) { select(members, family, (InternalJob) it.next(), stateMask); } } if ((stateMask & Job.WAITING) != 0) { select(members, family, waiting.peek(), stateMask); for (Iterator it = yielding.iterator(); it.hasNext();) { select(members, family, (InternalJob) it.next(), stateMask); } } if ((stateMask & Job.SLEEPING) != 0) select(members, family, sleeping.peek(), stateMask); } return members; }
/** * Returns a list of all jobs known to the job manager that belong to the given * family and are in one of the provided states. */ private List<InternalJob> select(Object family, int stateMask) { List<InternalJob> members = new ArrayList<>(); synchronized (lock) { if ((stateMask & Job.RUNNING) != 0) { for (Iterator<InternalJob> it = running.iterator(); it.hasNext();) { select(members, family, it.next(), stateMask); } } if ((stateMask & Job.WAITING) != 0) { select(members, family, waiting.peek(), stateMask); for (Iterator<InternalJob> it = yielding.iterator(); it.hasNext();) { select(members, family, it.next(), stateMask); } } if ((stateMask & Job.SLEEPING) != 0) select(members, family, sleeping.peek(), stateMask); } return members; }
/** * Returns a list of all jobs known to the job manager that belong to the given * family and are in one of the provided states. */ private List<InternalJob> select(Object family, int stateMask) { List<InternalJob> members = new ArrayList<InternalJob>(); synchronized (lock) { if ((stateMask & Job.RUNNING) != 0) { for (Iterator<InternalJob> it = running.iterator(); it.hasNext();) { select(members, family, it.next(), stateMask); } } if ((stateMask & Job.WAITING) != 0) { select(members, family, waiting.peek(), stateMask); for (Iterator<InternalJob> it = yielding.iterator(); it.hasNext();) { select(members, family, it.next(), stateMask); } } if ((stateMask & Job.SLEEPING) != 0) select(members, family, sleeping.peek(), stateMask); } return members; }
/** * Returns the estimated time in milliseconds before the next job is scheduled * to wake up. The result may be negative. Returns InternalJob.T_INFINITE if * there are no sleeping or waiting jobs. */ protected long sleepHint() { synchronized (lock) { //wait forever if job manager is suspended if (suspended) return InternalJob.T_INFINITE; if (!waiting.isEmpty()) return 0L; //return the anticipated time that the next sleeping job will wake InternalJob next = sleeping.peek(); if (next == null) return InternalJob.T_INFINITE; return next.getStartTime() - System.currentTimeMillis(); } }
/** * Returns the estimated time in milliseconds before the next job is scheduled * to wake up. The result may be negative. Returns InternalJob.T_INFINITE if * there are no sleeping or waiting jobs. */ protected long sleepHint() { synchronized (lock) { //wait forever if job manager is suspended if (suspended) return InternalJob.T_INFINITE; if (!waiting.isEmpty()) return 0L; //return the anticipated time that the next sleeping job will wake InternalJob next = sleeping.peek(); if (next == null) return InternalJob.T_INFINITE; return next.getStartTime() - System.currentTimeMillis(); } }
/** * Returns the estimated time in milliseconds before the next job is scheduled * to wake up. The result may be negative. Returns InternalJob.T_INFINITE if * there are no sleeping or waiting jobs. */ protected long sleepHint() { synchronized (lock) { //wait forever if job manager is suspended if (suspended) return InternalJob.T_INFINITE; if (!waiting.isEmpty()) return 0L; //return the anticipated time that the next sleeping job will wake InternalJob next = sleeping.peek(); if (next == null) return InternalJob.T_INFINITE; return next.getStartTime() - System.currentTimeMillis(); } }
InternalJob job = sleeping.peek(); while (job != null && job.getStartTime() < now) { job.setStartTime(now + delayFor(job.getPriority())); job.setWaitQueueStamp(waitQueueCounter++); changeState(job, Job.WAITING); job = sleeping.peek(); while ((job = waiting.peek()) != null) { InternalJob blocker = findBlockingJob(job); if (blocker == null)
InternalJob job = sleeping.peek(); while (job != null && job.getStartTime() < now) { job.setStartTime(now + delayFor(job.getPriority())); job.setWaitQueueStamp(waitQueueCounter.increment()); changeState(job, Job.WAITING); job = sleeping.peek(); while ((job = waiting.peek()) != null) { InternalJob blocker = findBlockingJob(job); if (blocker == null)
InternalJob job = sleeping.peek(); while (job != null && job.getStartTime() < now) { job.setStartTime(now + delayFor(job.getPriority())); job.setWaitQueueStamp(waitQueueCounter.increment()); changeState(job, Job.WAITING); job = sleeping.peek(); job = waiting.peek(); while (job != null) { InternalJob blocker = findBlockingJob(job);
InternalJob job = sleeping.peek(); while (job != null && job.getStartTime() < now) { job.setStartTime(now + delayFor(job.getPriority())); job.setWaitQueueStamp(waitQueueCounter.increment()); changeState(job, Job.WAITING); job = sleeping.peek(); job = waiting.peek(); while (job != null) { InternalJob blocker = findBlockingJob(job);