Created
October 2, 2016 19:00
-
-
Save john77eipe/6e6b173401dcc3d7929c5ae57c72d662 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.ServletException; | |
import javax.servlet.annotation.WebServlet; | |
import javax.servlet.http.HttpServlet; | |
import javax.servlet.http.HttpServletRequest; | |
import javax.servlet.http.HttpServletResponse; | |
@WebServlet(urlPatterns = "/sync0") | |
public class Sync0 extends HttpServlet { | |
private static final long serialVersionUID = 1L; | |
@Override | |
protected void service(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException { | |
Boolean status = (Boolean) request.getAttribute("dispatch"); | |
println("'status' attr: "+status); | |
if (Boolean.TRUE == status) { | |
//this condition will never run | |
println("Received dispatch, completing on the worker thread."); | |
response.getWriter().write("Dispatch received. Worker thread completed \n"); | |
response.getWriter().flush(); | |
} else { | |
response.getWriter().write("Before starting job \n"); | |
response.getWriter().flush(); | |
Thread thread = new Thread(new HeavyTask(request, response)); | |
thread.start(); | |
request.setAttribute("dispatch", Boolean.TRUE); | |
response.getWriter().write("After starting job \n"); | |
response.getWriter().flush(); | |
} | |
} | |
class HeavyTask implements Runnable { | |
HttpServletRequest req; | |
HttpServletResponse res; | |
HeavyTask(HttpServletRequest req, HttpServletResponse res) { | |
this.req = req; | |
this.res = res; | |
} | |
@Override | |
public void run() { | |
try { | |
Thread.currentThread().setName("Job-Thread-" + req.getParameter("job")); | |
for(int i=0; i<7; i++) { | |
res.getWriter().write("Doing work ("+i+")\n"); | |
Thread.sleep(1000); | |
println("work "+i+" completed"); | |
} | |
println("Job finished now dispatching..."); | |
} 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