Using one lens client to fire two queries in two threads results in discrepencies. LensClient has a Map<QueryHandle, LensStatement> and also has a cached instance of LensStatement. When two threads fire queries, both use the same statement object. LensStatement object in turn caches LensQuery Object. So whichever thread fired query last is the last one to set lens query inside statement causing LensClient.getStatement().getQuery() to return that query object for all threads.