All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.directwebremoting.impl.ThreadWaitSleeper Maven / Gradle / Ivy

package org.directwebremoting.impl;

import java.io.IOException;

import javax.servlet.http.HttpServletResponse;

import org.directwebremoting.extend.RealScriptSession;
import org.directwebremoting.extend.ScriptConduit;

/**
 * The simplest type of Sleeper that just uses {@link #wait()} and
 * {@link #notify()} to block a thread.
 * @author Joe Walker [joe at getahead dot ltd dot uk]
 * @author Mike Wilson
 */
public class ThreadWaitSleeper extends BaseSleeper
{
    public ThreadWaitSleeper(final HttpServletResponse response, final RealScriptSession scriptSession, final ScriptConduit conduit) throws IOException
    {
        super(response, scriptSession, conduit);
    }

    /* (non-Javadoc)
     * @see org.directwebremoting.impl.BaseSleeper#enterSleep()
     */
    @Override
    protected void enterSleep()
    {
        while(true) {
            synchronized (lock) {
                while(!awaken && !closed) {
                    try {
                        lock.wait();
                    } catch (InterruptedException ex) {
                        closed = true;
                    }
                }
                if (closed) {
                    break;
                }
                awaken = false;
            }
            doWork();
        }
    }

    /* (non-Javadoc)
     * @see org.directwebremoting.impl.BaseSleeper#wakeUp()
     */
    @Override
    protected void wakeUp()
    {
        synchronized (lock) {
            awaken = true;
            lock.notify();
        }
    }

    /* (non-Javadoc)
     * @see org.directwebremoting.impl.BaseSleeper#close()
     */
    @Override
    protected void close()
    {
        synchronized (lock) {
            closed = true;
            lock.notify();
        }
    }

    // Internal state
    private final Object lock = new Object();
    private boolean awaken = false;
    private boolean closed = false;
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy