Most graphics libraries are single-threaded, no getting around that. But your colleague's also right, doing your own concurrency from scratch using just threads is usually a bad idea. Try instead something higher level like the stuff in java.util.concurrent or an actor system like Kilim or Jumi or one of the ones mentioned in
this paper (it starts off with scala examples but don't worry, the libraries it compares are mostly java).
If it's networking, consider using netty instead of thread-based concurrency. And so on. Moral of the story is: concurrency is tricky business, so use a library.