Skip to main content

ThreadPoolExecutor for running AbortableHttpRequest - how to call abort?



I'm running a networking service in android where I direct all my http requests to run and get callbacks from the service when the requests are complete. I run the requests in a ThreadPoolExecutor to limit the number of concurrent requests. As the requests run within the pool, they eventually create an HttpGet or HttpPost, both of which indirectly implement AbortableHttpRequest , which allows one to cancel the connection (say, if it's blocking for a long time).





If a user cancels a request, I'd like to somehow drill into the thread queue and call the abort routine for that request. If, for example, a web site is not responding and the user chooses to do something else, right now my only option is to wait for the standard 5 minute http timeout to occur for that hung request before that thread is freed up. If I could access the thread that has my request and call abort, that would free things up right away.





From what I can understand, it appears once my request has gone into the thread pool, it's a black box until it comes out the other end. Querying the queue will only hand back futures, which hides the runnable.





Is there a better approach for this? I'm fairly new to java and threading (I mostly do perl, which doesn't do threads very well at all).


Comments

  1. Just because you give a task to a thread pool executor doesn't mean you can't hold a reference on it. Keep a reference on the task, and if the user chooses to cancel it, then call abort on your task.

    public class MyAbortableRunnable implements Runnable {
    private final Object lock = new Object();
    private AbortableHttpRequest request;

    public void abort() {
    synchronized(lock) {
    if (request != null) {
    request.abort();
    }
    }
    }

    @Override
    public void run() {
    ...
    // create the request
    synchronized(lock) {
    this.request = ...;
    }
    ...
    }
    }

    ReplyDelete

Post a Comment

Popular posts from this blog

Wildcards in a hosts file

I want to setup my local development machine so that any requests for *.local are redirected to localhost . The idea is that as I develop multiple sites, I can just add vhosts to Apache called site1.local , site2.local etc, and have them all resolve to localhost , while Apache serves a different site accordingly.