Язык Java изначально разрабатывался как язык, специально ориентированный на поддержку многопоточности [11]. Java библиотека предоставляет класс Thread, который поддерживает широкий набор методов: например, метод start () вызывает нить для выполнения, метод join () включает ожидание завершения нити. Механизм отпирания-запирания легко реализуется с помощью деклараций синхронизации. Базовые библиотеки системы хорошо защищены от некорректного использования функций в нитях. Эти свойства языка Java делают его более подходящим для многопоточного программирования. Приведем текст нашей программы, написанной на языке Java.
public class PiJavaThread { int n, numThreads; double pi = 0.0; synchronized void addPi(double p) { pi += p; } public PiJavaThread(int nd, int nt) { n = nd; numThreads = nt; Thread threads[] = new Thread[numThreads]; for (int i=0; i<numThreads; i++) { threads[i] = new Thread(new PIworker(i)); threads[i].start(); } for (int i=0; i<numThreads; i++) { try { threads[i].join(); } catch (InterruptedException e) { e.printStackTrace(); } } } class PIworker implements Runnable { int myid; public PIworker(int id) { myid = id; } public void run() { double d, s, x; d = 1.0/n; s = 0.0; for (int i=myid+1; i<=n; i+=numThreads) { x = (i-0.5)*d; s += 4.0/(1.0+x*x); } addPi(d*s); } } public static void main(String[] args) { PiJavaThread piJavaThread = new PiJavaThread(Integer.parseInt(args[0]), Integer.parseInt(args[1])); System.out.println(" pi = " + piJavaThread.pi); } }
Из листинга программы видно, что программирование на Java не намного проще, чем на языке С с использованием библиотеки Pthread. Хотя защита данных упрощается использованием специальной функции синхронизации, тем не менее, программирование на Java не менее трудоемко и вряд ли более удобно для написания больших вычислительных программ.