Created
October 2, 2016 19:01
-
-
Save john77eipe/9218a14d1fe46e7998ad366d27bd950e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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