Async Spring Controllers vs normal Controllers : <p>I wanted to analyze the improvement I may see by enabling Async Controllers in Spring Boot over normal controller</p>

<p>So here is my test code. One API returns a Callable and another is normal controller API. Both APIs block for <strong>10secs</strong> simulating a long running task</p>

<pre><code>@RequestMapping(value="/api/1",method=RequestMethod.GET)
    public List&lt;String&gt; questions() throws InterruptedException{
        Thread.sleep(10000);
        return Arrays.asList("Question1","Question2");
    }

    @RequestMapping(value="/api/2",method=RequestMethod.GET)
    public Callable&lt;List&lt;String&gt;&gt; questionsAsync(){
        return () -&gt; {
            Thread.sleep(10000);
            return Arrays.asList("Question2","Question2");
        };
    }
</code></pre>

<p>I set up embedded tomcat with this configuration i.e only one tomcat processing thread:</p>

<pre><code>server.tomcat.max-threads=1
logging.level.org.springframework=debug
</code></pre>

<p><strong>Expectations for /api/1</strong>
Since there is only one tomcat thread, another request will not be entertained untill this is processed after 10secs</p>

<p><strong>Results:</strong>
Meet expectations</p>

<hr>

<p><strong>Expectations for /api/2</strong>
Since we are returning a callable immediately, the single tomcat thread should get free to process another request. Callable would internally start a new thread. So if you hit the same api it should also gets accepted.</p>

<p><strong>Results:</strong>
This is not happening and untill the callable executes completely, no further request is entertained.</p>

<p><strong>Question</strong>
Why is /api/2 not behaving as expected?</p>
