When executing a normal query, the call returns only after the query completes. When you call the execute() method of a session instance to execute a query, the call returns after doing I/O to the cluster, waiting for the cluster to execute query and getting a response from the cluster. Meanwhile, the querying thread is idle and blocked. It can't execute other queries.
Consider the following example where you're trying to load a lot of user data. We could execute the code in a loop thousands of times, but each iteration waits for session.execute() to finish:
public ResultSet insertUserData(/* Some user data) {
PreparedStatement insertUser = ...; // Prepare the statement
BoundStatement bs = ... ; // Bind the statement
return session.execute(bs); // Execute the query
}
A client executes insertUserData() in a loop. While waiting for the method to complete, the client won't execute...