I am not a Java expert, but I will try to give you an idea of the difference between the two. OpenMP is directive based and tries to extend older languages like C, C++, and Fortran so that parallel programming is possible. OpenMP implementations are usually built on top of pthreads. Java on the other hand, was designed with multithreading support built-in. Threads are supported both at the language level for Java (syntactically), and at the virtual machine and class library levels. In many ways Java threads are very similar to POSIX pthreads. Does that help??