Clusters, composed of symmetric multiprocessor (SMP) machines and heterogeneous machines, have become increasingly popular for high-performance computing. Message-passing libraries, such as messagepassing interface (MPI) and parallel virtual machine (PVM), are de facto parallel programming libraries for clusters that usually consist of homogeneous and uni-processor machines. For SMP machines, MPI is combined with multithreading libraries like POSIX Thread and OpenMP to take advantage of the architecture. In addition to existing parallel programming libraries that are in C/C++ and FORTRAN programming languages, the Java programming language presents itself as another alternative with its object-oriented framework, platform neutral byte code, and ever-increasing performance. This paper presents a new parallel programming model and a library, VCluster, which implements this model. VCluster is based on migrating virtual threads instead of processes to support clusters of SMP machines more efficiently. The implementation uses thread migration, which can be used in dynamic load balancing. VCluster was developed in pure Java, utilizing the portability of Java to support clusters of heterogeneous machines. Several applications are developed to illustrate the use of this library and compare the usability and performance of VCluster with other approaches.commodity-off-the-shelf hardware components, free or widely used software like Linux, Windows NT, and a variety of middleware libraries. Cluster computing gains its popularity by providing a comparable performance to expensive, specially designed supercomputers at a fraction of the cost, as shown by the expanding list of clusters in the Top 500 Supercomputers [3].Parallel programming libraries provide necessary programming tools to develop parallel programs over the cluster. Message-passing programming models and libraries have been most widely used in cluster computing, where each node executes a different stream of instructions and exchanges messages when they need to share data or coordinate with other nodes. Message-passing interface (MPI) [4] has been used as a de facto standard for message-passing-based parallel computing. MPI specifies the necessary point-to-point and advanced collective communication primitives for message passing. MPI and other message-passing libraries such as parallel virtual machine (PVM) [5] have been widely used in developing parallel applications, proving their effectiveness due to simplicity and portability over various parallel computing platforms.Processor vendors have started producing relatively low-cost symmetric multiprocessor (SMP) machines in which multiple processors share the same memory, I/O devices, and other resources, and run a single copy of the operating system. Emergence of low-cost SMPs and low-cost operating systems running on these platforms such as Linux and UNIX made it possible to build a cluster of multiprocessors economically. Also, for clusters of SMP machines, fewer machines need to be connected through a slower n...