Introduced capability of configuring the daemon property on schedulers.
Also added the name property to ScheduledExecutorScheduler.
This commit is contained in:
parent
34cc0e5d82
commit
f096380a35
|
@ -20,18 +20,49 @@ package org.eclipse.jetty.util.thread;
|
||||||
|
|
||||||
import java.util.concurrent.ScheduledFuture;
|
import java.util.concurrent.ScheduledFuture;
|
||||||
import java.util.concurrent.ScheduledThreadPoolExecutor;
|
import java.util.concurrent.ScheduledThreadPoolExecutor;
|
||||||
|
import java.util.concurrent.ThreadFactory;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import org.eclipse.jetty.util.component.AbstractLifeCycle;
|
import org.eclipse.jetty.util.component.AbstractLifeCycle;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implementation of {@link Scheduler} based on JDK's {@link ScheduledThreadPoolExecutor}.
|
||||||
|
* <p />
|
||||||
|
* While use of {@link ScheduledThreadPoolExecutor} creates futures that will not be used,
|
||||||
|
* it has the advantage of allowing to set a property to remove cancelled tasks from its
|
||||||
|
* queue even if the task did not fire, which provides a huge benefit in the performance
|
||||||
|
* of garbage collection in young generation.
|
||||||
|
*/
|
||||||
public class ScheduledExecutorScheduler extends AbstractLifeCycle implements Scheduler
|
public class ScheduledExecutorScheduler extends AbstractLifeCycle implements Scheduler
|
||||||
{
|
{
|
||||||
|
private final String name;
|
||||||
|
private final boolean daemon;
|
||||||
private volatile ScheduledThreadPoolExecutor scheduler;
|
private volatile ScheduledThreadPoolExecutor scheduler;
|
||||||
|
|
||||||
|
public ScheduledExecutorScheduler()
|
||||||
|
{
|
||||||
|
this(null, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ScheduledExecutorScheduler(String name, boolean daemon)
|
||||||
|
{
|
||||||
|
this.name = name == null ? "Scheduler-" + hashCode() : name;
|
||||||
|
this.daemon = daemon;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void doStart() throws Exception
|
protected void doStart() throws Exception
|
||||||
{
|
{
|
||||||
scheduler = new ScheduledThreadPoolExecutor(1);
|
scheduler = new ScheduledThreadPoolExecutor(1, new ThreadFactory()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public Thread newThread(Runnable r)
|
||||||
|
{
|
||||||
|
Thread thread = new Thread(r, name);
|
||||||
|
thread.setDaemon(daemon);
|
||||||
|
return thread;
|
||||||
|
}
|
||||||
|
});
|
||||||
scheduler.setRemoveOnCancelPolicy(true);
|
scheduler.setRemoveOnCancelPolicy(true);
|
||||||
super.doStart();
|
super.doStart();
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,22 +39,24 @@ public class TimerScheduler extends AbstractLifeCycle implements Scheduler
|
||||||
*/
|
*/
|
||||||
|
|
||||||
private final String _name;
|
private final String _name;
|
||||||
|
private final boolean _daemon;
|
||||||
private Timer _timer;
|
private Timer _timer;
|
||||||
|
|
||||||
public TimerScheduler()
|
public TimerScheduler()
|
||||||
{
|
{
|
||||||
this(null);
|
this(null, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public TimerScheduler(String name)
|
public TimerScheduler(String name, boolean daemon)
|
||||||
{
|
{
|
||||||
_name=name;
|
_name=name;
|
||||||
|
_daemon=daemon;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void doStart() throws Exception
|
protected void doStart() throws Exception
|
||||||
{
|
{
|
||||||
_timer=_name==null?new Timer():new Timer(_name);
|
_timer=_name==null?new Timer():new Timer(_name,_daemon);
|
||||||
super.doStart();
|
super.doStart();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue