The problem is that you perform multiple database requests (like creating a collection) from different threads. ArangoDB doesn't know anything about your client threads. They are just other clients for the database. Database transaction wont help you. You would still get exceptions.
The easiest way to avoid your problem is by using a synchronized method in your threads for creating the collection. In that method you check whether the collection already exists before creating it.
Synchronized methods can only be executed in one thread at a time. Other threads calling it will be blocked. So the first thread calling your method will create the collection, following threads wont try to create it.
public synchronized void createCollection(ArangoDatabase database, String collection) {
if (!database.getCollections().stream().map(c -> c.getName()).anyMatch(c -> c.equals(collection)) {
database.createCollection(collection);
}
}