Skip to content

Instantly share code, notes, and snippets.

@john77eipe
Created October 2, 2016 19:00
Show Gist options
  • Save john77eipe/6e6b173401dcc3d7929c5ae57c72d662 to your computer and use it in GitHub Desktop.
Save john77eipe/6e6b173401dcc3d7929c5ae57c72d662 to your computer and use it in GitHub Desktop.
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