 <p>Looking at the code of EventSource, the <code>awaitFirstContact()</code> doesn't seem necessary in <code>open</code> method. I think there definitely should have been <code>open</code> method without blocking, because other processing is done asynchronizely. So I think you have to workaround it. There is a second parameter in <code>EventSource</code> constructor - <code>boolean open</code>. You can pass <code>false</code> there, so the eventsource will not be opened, than create new thread to open eventsource there.</p> <pre><code>public class Main { public static void main(String[] args) { WebTarget target = null;//... EventSource es = openAsynchronizely(target); es.register(new EventListener() { @Override public void onEvent(InboundEvent inboundEvent) { ///... } }); } static EventSource openAsynchronizely(WebTarget target) { EventSource eventSource = new EventSource(target, false); new OpenThread(eventSource).start(); return eventSource; } static class OpenThread extends Thread { private final EventSource eventSource; public OpenThread(EventSource eventSource) { this.eventSource = eventSource; } @Override public void run() { eventSource.open(); } } } </code></pre>