Вперед: 1.4.1.4. Программирование средствами OpenMP
Назад: 1.4.1.2. Многопоточность. Библиотека Pthread
К содержанию: Оглавление


1.4.1.3. Многопоточное программирование на языке Java

Язык Java изначально разрабатывался как язык, специально ориентированный на поддержку многопоточности [11]. Java библиотека предоставляет класс Thread, который поддерживает широкий набор методов: например, метод start () вызывает нить для выполнения, метод join () включает ожидание завершения нити. Механизм отпирания-запирания легко реализуется с помощью деклараций синхронизации. Базовые библиотеки системы хорошо защищены от некорректного использования функций в нитях. Эти свойства языка Java делают его более подходящим для многопоточного программирования. Приведем текст нашей программы, написанной на языке Java.

Программа pi.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 не менее трудоемко и вряд ли более удобно для написания больших вычислительных программ.



Вперед: 1.4.1.4. Программирование средствами OpenMP
Назад: 1.4.1.2. Многопоточность. Библиотека Pthread
К содержанию: Оглавление