I am not quite sure about the Java-UI but the OS-agents are working this way:
The agent gets a list of all CPs (in the same net area) with the number of connections and connect to all CPs. Then it closes all open connections except of the one with the lowest number. The CP load is not considered because it can change to quickly. As far as I know the Java-UI is soing something similar.
You can segregate certain types of connections onto dedicated CPs by using Net Areas. We are you using it to separate our agents from our normaler users (Java-UI) and our technical users (CallAPI und Java API). But from my own experience I can say that one should not exaggerate with the number of network areas... Currently we are using V11.2 (and V10). When we update to V12.x, we will possibly redesign it and only separate agents from users.