Calls to `requestToken` are sync in the SDK, and use a singleton executor in the SyncHttpScheduler. This means that requests will queue behind each other. If you have 50 threads creating tokens, the executor can only do 1 thread worth of throughput. Also related, adding more threads creating tokens means that _all_ threads end up taking longer (not just the later threads taking linearly longer). ``` Token id: 12 with time since start 5123ms Token id: 4 with time since start 5122ms Token id: 14 with time since start 5122ms Token id: 26 with time since start 5122ms Token id: 39 with time since start 5121ms Token id: 16 with time since start 5100ms Token id: 1 with time since start 5124ms Token id: 7 with time since start 5100ms Token id: 18 with time since start 5123ms Token id: 30 with time since start 5112ms ``` * https://github.com/ably/ably-java/blob/b2e6b222a09b0698793a2c1a2c851fad384564cb/lib/src/main/java/io/ably/lib/rest/Auth.java#L850-L851 * https://github.com/ably/ably-java/blob/b2e6b222a09b0698793a2c1a2c851fad384564cb/lib/src/main/java/io/ably/lib/http/SyncHttpScheduler.java#L8 ┆Issue is synchronized with this [Jira Task](https://ably.atlassian.net/browse/ECO-4746) by [Unito](https://www.unito.io)