HiveServer2 currently allows concurrent queries to be run in a single session. However, every HS2 session has an associated SessionState object, and the use of SessionState in many places assumes that only one thread is using it, ie it is not thread safe.
There are many places where SesssionState thread safety needs to be addressed, and until then we should serialize all query execution for a single HS2 session.
This problem can become more visible with HIVE-4239 now allowing parallel query compilation.
Note that running queries in parallel for single session is not straightforward with jdbc, you need to spawn another thread as the Statement.execute calls are blocking. I believe ODBC has non blocking query execution API, and Hue is another well known application that shares sessions for all queries that a user runs.