Package edu.rit.pj contains Parallel Java (PJ), an API and middleware for parallel programming in 100% Java on shared memory multiprocessor (SMP) parallel computers, cluster parallel computers, and hybrid SMP cluster parallel computers.

PJ includes the following classes for thread-based parallel programming inspired by the OpenMP standard.

- Class ParallelTeam
- Class ParallelConstruct
- Class ParallelRegion
- Class ParallelForLoop
  - Class IntegerForLoop
  - Class IntegerStrideForLoop
  - Class LongForLoop
  - Class LongStrideForLoop
- Class Schedule
  - Class IntegerSchedule
  - Class LongSchedule
- Class ParallelIteration
- Class ParallelSection
- Class BarrierAction
- Class Lock
- Thread safe shared reduction variable classes in package edu.rit.pj.reduction
- Binary operation classes for parallel reduction in package edu.rit.pj.reduction
- Class PJProperties

When such a program runs on an SMP parallel computer, the Java Virtual Machine (JVM) schedules each thread on a separate processor, thus executing the program in parallel. Although PJ achieves the same effect as OpenMP, PJ programs are coded differently from OpenMP programs. OpenMP uses pragmas or directives that must be translated by a precompiler. PJ uses Java classes and needs no precompiler.

PJ includes the following classes for message passing parallel programming inspired by the MPI standard.

- Class Comm
- Class CommRequest
- Class CommStatus
- Class Buf and its subclasses in package edu.rit.mp
- Item, array, and matrix buffer classes in package edu.rit.mp.buf
- Binary operation classes for parallel reduction in package edu.rit.pj.reduction
- Class PJProperties

PJ includes the following classes that provide the master-worker pattern for automatic loop partitioning and load balancing in message passing parallel programs.

- Class WorkerTeam
  - Class HybridTeam
- Class WorkerConstruct
- Class WorkerRegion
- Class WorkerForLoop
  - Class WorkerIntegerForLoop
  - Class WorkerIntegerStrideForLoop
  - Class WorkerLongForLoop
  - Class WorkerLongStrideForLoop

When such a program runs on a cluster parallel computer, the PJ message passing middleware runs multiple copies of the program, each in its own process on a different backend processor of the cluster, thus executing the program in parallel. PJ's message passing API is similar to that of MPI, except PJ's is an object oriented Java API.

For further information about the PJ message passing middleware, see package edu.rit.pj.cluster.

For further information about OpenMP, see the OpenMP Home Page (http://www.openmp.org/).

For further information about MPI, see the MPI Standard (http://www-unix.mcs.anl.gov/mpi/).