Многопоточный параллелизм Java против параллелизма

#java #multithreading #concurrency #parallel-processing

Вопрос:

Привет программистам всего мира, чтобы понять , в чем разница между параллелизмом и параллелизмом, мне было поручено решить эту проблему, но я столкнулся с проблемой, которую не смог решить, и это заняло у меня много времени, поэтому я пришел сюда, и я подумал, что кто-то может мне помочь . У меня проблема здесь я построил программу , которая имеет 4 класса, 2 из них являются «клиентскими» (Agsrq для отправки генерирует числа квадратов и AgFibo, поэтому отправляйте последовательность чисел Фибоначчи), используемые для отправки номера на сервер (agclassserver получает данные от Agsqr и Agfibo для заказа и отображения их в виде списка ) , и я добавляю другой класс ,чтобы сервер принимал много клиентов (многопоточность) в этом случае Agsqr и AgFibo выполняют роль клиента.

Итак, вот моя проблема , когда я выполнить классов (agclassserver «сервер» , Agsqr amp; AgFibo «клиенты») в результате, дает мне только первым клиентом позволяет сказать «Agsqr» и когда я выполнить AgFibo он не выполняет, но это дает мне еще один исполнения Agsqr «так я и есть результат двух Agsqr »

Вот все вае класса I, используемые в этой программе

Agclassserver

 package smatp2;  import java.io.DataInputStream; import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.Collections; import java.util.concurrent.*;    public class agclassserver {    public static void main(String[] args) throws IOException, InterruptedException {  // TODO Auto-generated method stub  ArrayListlt;Integergt; array = new ArrayListlt;Integergt;();  ArrayListlt;ClassesHandlergt; classes_handler = new ArrayListlt;ClassesHandlergt;();  ExecutorService service= Executors.newFixedThreadPool(10);    boolean var=true;  int message;    try {   while(true) {  ServerSocket server = new ServerSocket(9090);  System.out.println("I waiting for the client ");  Socket socket = server.accept();// waiting for client to connect with server  ClassesHandler client = new ClassesHandler(socket);  classes_handler.add(client);  service.execute(client);  }  }catch (Exception e) {      }       }  }  

Agsqr

 package smatp2;  import java.io.DataOutputStream; import java.io.IOException; import java.io.OutputStream; import java.net.Socket;   public class Agsqr {    public static void main(String[] args) throws IOException, InterruptedException {  // TODO Auto-generated method stub  try {  Socket socket = new Socket ("localhost", 9090);  int n=0;  OutputStream output = socket.getOutputStream();  DataOutputStream stream = new DataOutputStream(output);  while(true) {    int result = n*n;  stream.writeInt(result);  n  ;  Thread.sleep(1000);  }  }catch(Exception e) {    }    }   }  

AgFibo

 package smatp2;  import java.io.DataOutputStream; import java.io.IOException; import java.io.OutputStream; import java.net.Socket; import java.net.UnknownHostException;    public class AgFibo extends Thread {    public synchronized void run() {   }   public static void main(String[] args) throws UnknownHostException, IOException, InterruptedException {  // TODO Auto-generated method stub  try {  int number ;   int previousNumber = 0;  int nextNumber = 1;  boolean variable=false ;  Socket socket = new Socket ("localhost", 9090);  int n=0;  OutputStream output = socket.getOutputStream();  DataOutputStream stream = new DataOutputStream(output);    while(!variable){  stream.writeInt(previousNumber);  int sum = previousNumber   nextNumber;  previousNumber = nextNumber;  nextNumber = sum;   Thread.sleep(1000);  }    }catch(Exception e) {    }  }  }  

ClassesHandler

 package smatp2;  import java.io.*; import java.net.*; import java.util.ArrayList; import java.util.Collections;  public class ClassesHandler implements Runnable {        private Socket socket;  private int message;  ArrayListlt;Integergt; array = new ArrayListlt;Integergt;();      private DataInputStream dataInputStream;  public ClassesHandler(Socket socket) throws IOException{  this.socket = socket;  dataInputStream = new DataInputStream(socket.getInputStream());  }       @Override  public void run() {  // TODO Auto-generated method stub  try {  while(true) {  message = dataInputStream.readInt();  array.add(message);// waiting for client to connect with server  Collections.sort(array);  System.out.println(message);  System.out.println(array);  //Thread.sleep(500);  }  } catch (IOException e) {  // TODO Auto-generated catch block  e.printStackTrace();  }  }  }   

agclassserver /* Извините, я забыл опубликовать класс classserver */

 package smatp2;  import java.io.DataInputStream; import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.Collections; import java.util.concurrent.*;    public class agclassserver {    public static void main(String[] args) throws IOException, InterruptedException {  // TODO Auto-generated method stub  ArrayListlt;Integergt; array = new ArrayListlt;Integergt;();  ArrayListlt;Integergt; arraySQR = new ArrayListlt;Integergt;();  ArrayListlt;Integergt; arrayFibo = new ArrayListlt;Integergt;();  ArrayListlt;ClassesHandlergt; classes_handler = new ArrayListlt;ClassesHandlergt;();  ExecutorService service= Executors.newFixedThreadPool(10);    boolean var=true;  int message;    try {   ServerSocket server = new ServerSocket(9090);  while(true) {    System.out.println("I waiting for the client ");  Socket socket = server.accept();// waiting for client to connect with server  String hostName = socket.getInetAddress().getHostName();  ClassesHandler client = new ClassesHandler(socket,array,arraySQR,arrayFibo,hostName);  classes_handler.add(client);  service.execute(client);    }  }catch (Exception e) {      }       }  }   

Комментарии:

1. Почему вы не печатаете пойманное исключение в классе agclassserver?

2. @ecerer , О , мои извинения, я был очень смущен, так что забыл опубликовать . кроме того, я решил проблему, если вам интересно, я мог бы отправить вам всю программу .

Ответ №1:

Параллельное против параллельного.

Представьте, что вам нужно получить новый паспорт и подготовить презентацию для работы.

Не параллельно и не параллельно: сначала вы идете за паспортом, а затем готовите презентацию.

Не параллельно, а параллельно: вы идете в посольство и ждете своей очереди на стуле. Пока вы ждете, вы работаете над своей презентацией. Как только настанет ваша очередь, вы закроете ноутбук и заполните паспортные документы, а затем завершите презентацию.

Параллельно и одновременно: вы идете работать над своей презентацией, пока отправляете жену/мужа в посольство за паспортом.

Существует также возможность делать параллельные и не параллельные операции. Но это не согласуется с приведенным выше примером. И примером может быть вычисление суммы 2 огромных целых массивов. С помощью SIMD несколько целочисленных добавлений могут выполняться параллельно, но параллелизма нет, так как существует только один запрос.