Skip to content

Instantly share code, notes, and snippets.

@john77eipe
Created October 2, 2016 19:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save john77eipe/9218a14d1fe46e7998ad366d27bd950e to your computer and use it in GitHub Desktop.
Save john77eipe/9218a14d1fe46e7998ad366d27bd950e to your computer and use it in GitHub Desktop.
package async;
import java.io.IOException;
import javax.servlet.AsyncContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(urlPatterns = "/async1", asyncSupported = true)
public class Async1 extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void service(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException {
response.getWriter().write("Before starting job \n");
response.getWriter().flush();
final AsyncContext actx = request.startAsync();
actx.setTimeout(Long.MAX_VALUE);
Thread thread = new Thread(new HeavyTask(actx));
thread.start();
response.getWriter().write("After starting job \n");
response.getWriter().flush();
}
class HeavyTask implements Runnable {
AsyncContext actx;
HeavyTask(AsyncContext actx) {
this.actx = actx;
}
@Override
public void run() {
try {
Thread.currentThread().setName("Job-Thread-" + actx.getRequest().getParameter("job"));
for (int i = 0; i < 7; i++) {
actx.getResponse().getWriter().write("Doing work (" + i + ")\n");
Thread.sleep(1000);
println("work " + i + " completed");
}
println("Job finished now dispatching...");
actx.dispatch("/async1.jsp");
} catch (InterruptedException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void println(String output) {
System.out.println("[" + Thread.currentThread().getName() + "]" + output);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment